ActiveMQ初体验(转)
转载地址:http://www.cnblogs.com/diorlv/p/3328712.html 做了修改
首先介绍下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送。
下面介绍主题,就是今天为大家介绍的ActiveMQ:
他是Apache出品的一个开源的消息队列软件,运行在JVM下,支持多种语言,如JAVA,C++,C#。
现在先为大家介绍下如何配置ActiveMQ的服务器端:
1、当然是下载软件了
去官方网站下载:http://activemq.apache.org/ 我下载的是apache-activemq-5.8.0-bin 5.8版本,当然开源的也是支持下载source的,需要自己编译下,这里不做过多介绍
2、解压后,进入\apache-activemq-5.8.0\bin\win32启动activemq.bat。系统会自动执行启动过程,当然一般安装失败的情况是没有装JVM环境,启动成功应该是这样
3、打开浏览器输入http://localhost:8161/admin/;用户名和密码默认是admin,admin默认配置是这个,当然你也可以更改这个配置
4、至此,服务端启动完毕
—————————————————————————————————完美分割———————————————————————————————————
现在就是今天的主题了,怎样在C#中使用ActiveMQ提供的API实现消息的订阅和发布
1、首先需要下载ActiveMQ提供的API函数,这个也从官网下
http://activemq.apache.org/nms/nms-api-downloads.html Apache.NMS-1.6.0-bin和Apache.NMS.ActiveMQ-1.6.0-bin 这两个dll都在下载后文件夹的bin目录下;
,也可以直接从NuGet包中搜索
2、将这两个文件在项目中引用;
3、在ActiveMQ中,有两个概念,一个是生产者(Producer),另一个是消费者(Consumer),生产者就是我们常说的发布者,而消费者,就是订阅者,这样解释可能更好理解一下吧,如果知道发布订阅模式的话,不知道的话,字面意思也很好理解,发布者就是发布消息的,而订阅者通过订阅事件,将消息接收到;
5、Product
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Apache.NMS;
using Apache.NMS.ActiveMQ; namespace MqProducer
{
public partial class ProducerDemo : Form
{
//声明连接对象工厂
private IConnectionFactory factory; public ProducerDemo()
{
InitializeComponent();
InitProducer();
} public void InitProducer()
{
try
{
//初始化工厂,这里默认的URL是不需要修改的
factory = new ConnectionFactory("tcp://localhost:61616"); }
catch
{
lbMessage.Text = "初始化失败!!";
}
} private void btnConfirm_Click(object sender, EventArgs e)
{
//通过工厂建立连接
using (IConnection connection = factory.CreateConnection())
{
//通过连接创建Session会话
using (ISession session = connection.CreateSession())
{
//通过会话创建生产者,方法里面new出来的是MQ中的Queue
IMessageProducer prod = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"));
//创建一个发送的消息对象
ITextMessage message = prod.CreateTextMessage();
//给这个对象赋实际的消息
message.Text = txtMessage.Text;
//设置消息对象的属性,这个很重要哦,是Queue的过滤条件,也是P2P消息的唯一指定属性
message.Properties.SetString("filter","demo");
//生产者把消息发送出去,几个枚举参数MsgDeliveryMode是否长链,MsgPriority消息优先级别,发送最小单位,当然还有其他重载
prod.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue); //发送对象,注意User类要标记为可序列化的
IObjectMessage message = prod.CreateObjectMessage(new User(){Name="张三"+i, Age=i});
lbMessage.Text = "发送成功!!";
txtMessage.Text = "";
txtMessage.Focus();
}
} }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Apache.NMS;
using Apache.NMS.ActiveMQ; namespace MqConsumer
{
public partial class ConsumerDemo : Form
{
public ConsumerDemo()
{
InitializeComponent();
InitConsumer();
} public void InitConsumer()
{
//创建连接工厂
IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616");
//通过工厂构建连接
IConnection connection = factory.CreateConnection();
//这个是连接的客户端名称标识
connection.ClientId = "firstQueueListener";
//启动连接,监听的话要主动启动连接
connection.Start();
//通过连接创建一个会话
ISession session = connection.CreateSession();
//通过会话创建一个消费者,这里就是Queue这种会话类型的监听参数设置
IMessageConsumer consumer = session.CreateConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"), "filter='demo'");
//注册监听事件
consumer.Listener += new MessageListener(consumer_Listener);
//connection.Stop();
//connection.Close(); } void consumer_Listener(IMessage message)
{
ITextMessage msg = (ITextMessage)message; //接收对象消息
IObjectMessage msg = (IObjectMessage) message;
User user = msg.Body as User;
//异步调用下,否则无法回归主线程
tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage),msg); } public delegate void DelegateRevMessage(ITextMessage message); public void RevMessage(ITextMessage message)
{
tbReceiveMessage.Text += string.Format(@"接收到:{0}{1}", message.Text, Environment.NewLine);
}
}
}
ActiveMQ初体验(转)的更多相关文章
- ActiveMQ初体验
首先介绍下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送. 下面介绍主题,就是今天为大家介绍的ActiveMQ ...
- java activemq初体验
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- Java消息队列--ActiveMq 初体验
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中
JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...
- SpringBoot初体验及原理解析
一.前言 上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
随机推荐
- 设置 github 帐号user.name和邮箱user.email
git config --global user.name username git config --global user.email username@email.com
- 【bzoj1913】 Apio2010—signaling 信号覆盖
http://www.lydsy.com/JudgeOnline/problem.php?id=1913 (题目链接) 题意 给出一个平面上n个点,求任选3个点画一个圆所包含的点的期望值. Solut ...
- Formal Definitions Using ASN.1 - SNMP Tutorial
30.7 Formal Definitions Using ASN.1 The SMI standard specifies that all MIB variables must be define ...
- 漫谈JVM
背景介绍 JVM已经是Java开发的必备技能了,JVM相当于Java的操作系统. JVM,java virtual machine, 即Java虚拟机,是运行java class文件的程序. Java ...
- php htmlentities函数的问题
看到在细说php第二版教程中的函数htmlentities 例子,实际实验没有效果 $str = "一个 'quote' 是<b>bold</b>";ech ...
- Java学习笔记12
循环 打印一个字符串(例如: "Welcome to Java!") 100次,就需要吧下面的输出语句重复写100遍,这是相当繁琐的: System.out.println(&qu ...
- [UML]UML系列——类图class的依赖关系
相关文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列—— ...
- read name 和 read 在 Bash 中的区别
read 带一个参数和不带参数的区别是什么,我本以为仅仅是被赋值的变量的名字不同而已: $ read name 1 $ echo "$name" 1 $ read 1 $ echo ...
- Servlet监听器
一.servlet的8个监听器 场景 监听者接口 事件类型 你想知道一个web应用上下文中是否增加.删除或替换了一个属性 javax.servlet.ServletContextAttributeLi ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...