MQ_ActiveMQ环境部署+C#推送和接收消息
一、 ActiveMQ环境部署
- Jdk:jdk-8u91-windows-i586.exe
- ActiveMQ:apache-activemq-5.15.0,选择win64,启动服务activemq,要求端口号61616不被占用,启动服务效果如图:
- 如果安装提示Failed to execute start task,解决方法:停止ICS(运行-->services.msc找到Internet Connection Sharing (ICS)服务,改成手动启动或禁用)
- ActiveMQ类库:
(1)Apache.NMS.dll路径:\Apache.NMS.ActiveMQ-1.7.2-bin\lib\Apache.NMS\net-3.5
(2)Apache.NMS.ActiveMQ.dll路径:\Apache.NMS.ActiveMQ-1.7.2-bin\build\net-3.5\debug
安装完成,访问地址效果如图:
- ActiveMQ后台管理地址:http://localhost:8161/admin,默认账号:admin,密码:admin
二、 C#ActiveMQ实现推送接收数据
- 添加ActiveMQ类库Apache.NMS.dll、Apache.NMS.ActiveMQ.dll
- 定义传值参数类:ActiveMQModel,命名空间定义:ActiveMQClient。
namespace ActiveMQClient { [Serializable] public class ActiveMQModel { /// <summary> /// guid /// </summary> public string guid { get; set; } /// <summary> /// 方法名 /// </summary> public string method { get; set; } /// <summary> /// 接口参数(T转json) /// </summary> public string json { get; set; } } } |
- 初始化ActiveMQ,注册推送事件,定义推送方法。
using ActiveMQClient; using Apache.NMS; using Apache.NMS.Util; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ActiveMQ { public class ActiveMQHelper { private static IConnectionFactory connFac; private static IConnection connection; private static ISession session; private static IDestination destination; private static IMessageProducer producer; private static IMessageConsumer consumer; /// <summary> /// 初始化ActiveMQ /// </summary> public static void initAMQ() { string strsendTopicName = "A";//推送方topic名 string strreceiveTopicName = "B";//接受方toptic名 var url = "localhost:61616";//activemq地址 var userid = "oa";//帐户 var pwd = "oa";//密码 try { connFac = new NMSConnectionFactory(new Uri("activemq:failover:(tcp://" + url + ")")); //new NMSConnectionFactory(new Uri("activemq:failover:(tcp://localhost:61616)")); //新建连接 connection = connFac.CreateConnection(userid, pwd);//connFac.CreateConnection("oa", "oa");//设置连接要用的用户名、密码 //如果你要持久“订阅”,则需要设置ClientId,这样程序运行当中被停止,恢复运行时,能拿到没接收到的消息! connection.ClientId = "ClientId_" + strsendTopicName; //connection = connFac.CreateConnection();//如果你是缺省方式启动Active MQ服务,则不需填用户名、密码 //创建Session session = connection.CreateSession(); //发布/订阅模式,适合一对多的情况 destination = SessionUtil.GetDestination(session, "topic://" + strreceiveTopicName); //新建生产者对象 producer = session.CreateProducer(destination); producer.DeliveryMode = MsgDeliveryMode.Persistent;//ActiveMQ服务器停止工作后,消息不再保留 //新建消费者对象:普通“订阅”模式 //consumer = session.CreateConsumer(destination);//不需要持久“订阅” //新建消费者对象:持久"订阅"模式: // 持久“订阅”后,如果你的程序被停止工作后,恢复运行, //从第一次持久订阅开始,没收到的消息还可以继续收 consumer = session.CreateDurableConsumer( session.GetTopic(strsendTopicName) , connection.ClientId, null, false); //设置消息接收事件 consumer.Listener += new MessageListener(OnMessage); //启动来自Active MQ的消息侦听 connection.Start(); } catch (Exception e) { SysErrorLog.SaveErrorInfo(e, "初始化ActiveMQ失败"); } } /// <summary> /// 推送ActiveMQ /// </summary> /// <param name="guid"></param> /// <param name="t"></param> /// <param name="method"></param> public static void Send(string guid, object t, string method) { if (producer == null) { initAMQ(); } if (session == null) { throw new Exception("请初始化ActiveMQ!"); } if (producer == null) { throw new Exception("请初始化ActiveMQ!"); } var model = new ActiveMQModel(); model.guid = guid; model.method = method; model.json = JsonConvert.SerializeObject(t); var i = session.CreateObjectMessage(model); producer.Send(i); } /// <summary> /// 接收ActiveMQ消息 /// </summary> /// <param name="receivedMsg"></param> protected static void OnMessage(IMessage receivedMsg) { if (receivedMsg is IObjectMessage) { var message = receivedMsg as IObjectMessage; if (message.Body is ActiveMQModel) { SysErrorLog.SaveErrorInfo("ActiveMQModel=" + JsonConvert.SerializeObject(message.Body)); } } } } } |
三、 C#推送ActiveMQ,以更新机构商品库存为例:
推送代码:
var model = new { ShopId = ShopId,//门店编码 proNum = newKuc,//库存 skuNo = skuno,//sku }; var guid=Guid.NewGuid().ToString(); var method = "updatestoreproductkuc"; var lst = new List<object>(); lst.Add(model); ActiveMQHelper.Send(guid, lst, method); |
接收报文格式如下
1 |
ActiveMQ站点账号密码设置 |
https://www.cnblogs.com/MIC2016/p/6196789.html |
|
2 |
ActiveMQ的访问密码 |
http://blog.csdn.net/zbw18297786698/article/details/52994612 |
转载于:https://www.cnblogs.com/a735882640/p/7625771.html
MQ_ActiveMQ环境部署+C#推送和接收消息相关推荐
- 微信小程序消息推送、接收消息事件、发送客服消息
文档地址消息推送 | 微信开放文档 接收消息和事件 | 微信开放文档 发送客服消息 | 微信开放文档 代码参考 public function xcxToken(){$signature = $thi ...
- mysql消息队列推送到redis_消息队列redis部署,以及在实际场景中使用 – 小雨点来了...
接上一节的继续,上一节说过了因近期接手其他部门项目,发现诸多问题.关于mysql 并发 处理已经讲过,没有看过的同学可以去这里:http://xytong.cc/archives/87 . 本节讲讲如 ...
- flask websocket json_Win10环境下使用Flask配合Celery异步推送实时/定时消息/2020年最新攻略...
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask 1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Ce ...
- python 版本的 OneNET物联网平台——HTTP推送数据接收
OneNET物联网平台--HTTP推送数据接收 flask框架 写的python版本的 HTTP推送, 消息加密方式:安全模式 用的onenet平台的模拟数据,接受成功!!! # coding:utf ...
- Java推送IOS通知消息
Java推送IOS通知消息 公司需要做IOS消息推送,我负责后台代码的实现.写这篇文章也是将我踩坑得来的结果记录一下,分享一下. APN介绍 Apple 推送通知服务(APNs) 是远程通知功能的核心 ...
- Docker最全教程之使用.NET Core推送钉钉消息(二十)
前言 上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明. 最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreR ...
- 微信公众号-java上传图片素材到微信服务器基于事件推送两条消息
微信公众号-java上传图片素材到微信服务器&基于事件推送两条消息 场景:基于微信扫码登录/关注事件,向用户推送两条消息. 分析:翻阅了微信开发者文档和一些其他资料发现,公众号针对用户关注/扫 ...
- 微信公众号推送多图文消息,直接跳转至外部链接(wxJava)
文章目录 前言 一.解决思路 1.公众号后台设置 2.客服消息 3.google & baidu 寻找答案 4.关注后自动推送(正解) 总结 前言 需求:用户关注公众号后,如何在微信推送的多图 ...
- 企业微信应用设置可信域名_企业微信应用变更域名,可信域名只能设置一个导致原有推送的模板消息(旧域名)直接提示需使用应用可信域名...
事故过程: 域名从A变成B后,旧有的推送消息点击直接提示 [redirect_uri需要使用应用可信域名,原有的模板消息推送中带有旧的域名地址A], 而此时,企业微信管理后台该应用的可信域名已经变成了 ...
- Android消息推送:第三方消息推送平台详细解析
前言 消息推送在Android开发中应用的场景是越来越多了,比如说电商产品进行活动宣传.资讯类产品进行新闻推送等等,如下图: 本文将介绍Android中实现消息推送的第三方推送的详细解决方案 阅读本文 ...
最新文章
- 优化调整Oracle 8i数据库
- FZOJ 2014年11月份月赛 ytaaa(dp + RMQ)
- 跨浏览器兼容的HTML5视频音频播放器
- Spring依赖注入@Autowired原理解析(一)之寻找需要注入的属性
- WinRAR加密压缩冒充GlobeImposter勒索病毒 安全专家轻松解密
- 阻击 瑞星 和 雅虎助手 的 SVOHOST.exe(第2版)
- 大话卷积神经网络(CNN)
- M1芯片Mac mini 2K显示器开启HiDpi
- mysqldump关于--set-gtid-purged=OFF的使用
- 使用laravel搭建博客网站-博客的注册功能
- android 磁贴布局,拼图酱 - 通过布局、磁贴、滤镜等元素重新组合照片,充满乐趣 - Android 应用 - 图像 - 【最美应用】...
- linux 运行.deb,Ubuntu下如何用命令行运行deb安装包
- 呕心沥血互联网产品经理巨作
- 全球运输工业的升级会带来什么
- 新能源智慧路灯充电桩可行性分析
- Docker快速安装部署
- 当Android遇上设计模式之代理(Proxy)模式
- Win10任务栏应用图标为空白页
- 微幅波的解析解求解及弥散方程的推导
- 金山办公2020笔试
热门文章
- 【图像处理】双边滤波算法(bilateral filter)和导向滤波算法(guided filter)
- gitlab提交代码
- 【Caffe安装】ImportError: No module named caffe 的解决方案
- Python基于wordnet实现词语相似度计算分析
- centos7全盘备份到本地_centos7磁盘备份和还原
- react 翻书效果_react.js 翻页插件实例代码
- python中if语句的实例_如何在Python中的if语句中调用某个函数?
- python实现一款编译型语言_Java,Python谁是编译型语言,谁是解释型语
- a^x ≡1(mod n) Ord_n(a)=x什么意思
- C++ 迭代器是指针吗