C#实现ActiveMQ消息队列
本文使用C#实现ActiveMQ消息队列功能。
一、首先需要导入两个包,分别是:Apache.NMS 和 Apache.NMS.ActiveMQ
二、创建Winform程序实现生产者功能。
三、Producer后台代码如下:
using Apache.NMS;
using Apache.NMS.ActiveMQ;
using System;
using System.Runtime.Serialization;
using System.Windows.Forms; namespace ActiveMQProducer
{
public partial class Producer : Form
{
// 生产者
public Producer()
{
InitializeComponent();
InitProducer();
}
private IConnectionFactory factory; 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("ActiveMQTest")); #region 发送结构信息 //Student studentModel = new Student();
//studentModel.Grade = "三年级";
//studentModel.Name = "张三";
//studentModel.Sex = "男";
//studentModel.Age = "23"; //string temp = JsonConvert.SerializeObject(studentModel);
//ITextMessage message = prod.CreateTextMessage(temp); #endregion #region 发送文本信息 //创建一个发送的消息对象
ITextMessage message = prod.CreateTextMessage();
//给这个对象赋实际的消息
message.Text = txtMessage.Text; #endregion //设置消息对象的属性,这个很重要哦,是Queue的过滤条件,也是P2P消息的唯一指定属性
message.Properties.SetString("filter", "SwipeCard");
//生产者把消息发送出去,几个枚举参数MsgDeliveryMode是否长链,MsgPriority消息优先级别,发送最小单位,当然还有其他重载
prod.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue);
lbMessage.Text = "发送成功!!";
txtMessage.Text = "";
txtMessage.Focus();
}
}
}
} [DataContract]
public class Student
{
[DataMember]
public string Grade { get; set; } [DataMember]
public string Name { get; set; } [DataMember]
public string Sex { get; set; } [DataMember]
public string Age { get; set; }
}
}
四、接下来创建Winform程序实现消费者功能。
五、Customer后台代码如下:
using Apache.NMS;
using Apache.NMS.ActiveMQ;
using Apache.NMS.ActiveMQ.Commands;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace ActiveMQCustomer
{
public partial class Customer : Form
{
// 消费者
public Customer()
{
InitializeComponent();
InitConsumer();
} public void InitConsumer()
{
//创建连接工厂
IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616");
//通过工厂构建连接
IConnection connection = factory.CreateConnection();
//这个是连接的客户端名称标识
connection.ClientId = "SwipeCardActionListener";
//启动连接,监听的话要主动启动连接
connection.Start();
//通过连接创建一个会话
ISession session = connection.CreateSession();
//通过会话创建一个消费者,这里就是Queue这种会话类型的监听参数设置
IMessageConsumer consumer = session.CreateConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("ActiveMQTest"), "filter='SwipeCard'");
//注册监听事件
consumer.Listener += new MessageListener(consumer_Listener);
// connection.Stop();
// connection.Close();
} void consumer_Listener(IMessage message)
{
#region 接收结构类型 //try
//{
// ActiveMQTextMessage receiveMsg = message as ActiveMQTextMessage; // Student studentModel = JsonConvert.DeserializeObject<Student>(receiveMsg.Text); // tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage), receiveMsg);
//}
//catch (Exception ex)
//{ //} #endregion #region 接收文本类型 ITextMessage msg = (ITextMessage)message;
tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage), msg); #endregion
} public delegate void DelegateRevMessage(ITextMessage message); public void RevMessage(ITextMessage message)
{
tbReceiveMessage.Text += string.Format(@"接收到:{0}{1}", message.Text, Environment.NewLine);
}
} [DataContract]
public class Student
{
[DataMember]
public string Grade { get; set; } [DataMember]
public string Name { get; set; } [DataMember]
public string Sex { get; set; } [DataMember]
public string Age { get; set; }
}
}
六、根据服务器上操作系统的版本,选择进入到win32还是win64,开启ActiveMQ服务。
七、然后启动我们程序,进行测试。
最后附上源码
链接: https://pan.baidu.com/s/1NOnGFVt_qyZYblU4d2P4Nw
提取码: 7hbh
C#实现ActiveMQ消息队列的更多相关文章
- activemq消息队列的使用及应用docker部署常见问题及注意事项
activemq消息队列的使用及应用docker部署常见问题及注意事项 docker用https://hub.docker.com/r/rmohr/activemq/配置在/data/docker/a ...
- JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明
1----------------------观察者模式------------------------------ 观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的 ...
- ActiveMQ消息队列从入门到实践(4)—使用Spring JMS收发消息
Java消息服务(Java Message Service ,JMS)是一个Java标准,定义了使用消息代理的通用API .在JMS出现之前,每个消息代理都有私有的API,这就使得不同代理之间的消息代 ...
- SpringBoot集成ActiveMq消息队列实现即时和延迟处理
原文链接:https://blog.csdn.net/My_harbor/article/details/81328727 一.安装ActiveMq 具体安装步骤:自己谷歌去 二.新建springbo ...
- ActiveMQ 消息队列服务
1 ActiveMQ简介 1.1 ActiveMQ是什么 ActiveMQ是一个消息队列应用服务器(推送服务器).支持JMS规范. 1.1.1 JMS概述 全称:Java Message Serv ...
- ActiveMQ基础教程(四):.net core集成使用ActiveMQ消息队列
接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列 这里继续说下.net core集成使用ActiveMQ.因为代码比较多,所以放到gitee上:https://gitee ...
- ActiveMQ消息队列的使用及应用
这里就不说怎么安装了,直接解压出来就行了. 谢绝转载,作者保留所有权力 目录: 一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2 ...
- Spring整合ActiveMq消息队列
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- JAVAEE——宜立方商城08:Zookeeper+SolrCloud集群搭建、搜索功能切换到集群版、Activemq消息队列搭建与使用
1. 学习计划 1.solr集群搭建 2.使用solrj管理solr集群 3.把搜索功能切换到集群版 4.添加商品同步索引库. a) Activemq b) 发送消息 c) 接收消息 2. 什么是So ...
随机推荐
- PIE SDK归一化水体指数法
1.算法功能简介 归一化指数法(NDWI(Normalized Difference Water Index,归一化水指数)),用遥感影像的特定波段进行归一化差值处理,以凸显影像中的水体信息. 其表达 ...
- Python 绘图与可视化 matplotlib 动态条形图 bar
bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...
- mysql锁机制总结,以及优化建议
一.锁概述和分类 二.表锁 偏向MyISAM存储引擎,开销小,加锁快:无死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. [手动增加表锁] lock table 表名字1 read(write), ...
- 微服务架构 ------ Dockerfile定制镜像
Docker容器不仅仅是运行原生的容器,而是把我们的具体的项目能够布置到容器上面去,这就是Docker定制镜像需要做的事情. Docker容器 = new Docker镜像 镜像相当于类,容器相当 ...
- 开机注册联通2G网络
2/3G PLMN LIST 在MM_RATCM_PLMN_LIST_CNF或NWSEL_MM_PLMN_SEARCH_CNF消息中可以查看2,3G搜到的PLMN LIST 内容如下: RAT:Rad ...
- kubernetes学习之service、deployment、pod的关系
deployment根据Pod的标签关联到Pod,是为了管理pod的生命周期 service根据Pod的标签关联到pod,是为了让外部访问到pod,给pod做负载均衡 需要注意: deployment ...
- 查看 Python 对象的属性
1 .dir函数可以返回一个对象的所有属性和方法. 示例:查看 int 对象的属性和方法 示例: 查看 dict 对象的属性和方法 标红的这些是不是遇到过? 2.help()调用内置帮助系统 示例 3 ...
- PacMan 01——地图的搭建
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Python实现斐波那契数列,九九乘法表,金字塔方法。
斐波那契数列普通函数实现 #普通函数 def fb(max): a,b=0,1 while a<max: print(a) a,b=b,a+b fb(100) 递归实现方法1 def fb1(m ...
- vue - 基础(3)
1.数据的双向绑定 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...