一、          ActiveMQ环境部署

  1. Jdk:jdk-8u91-windows-i586.exe
  2. ActiveMQ:apache-activemq-5.15.0,选择win64,启动服务activemq,要求端口号61616不被占用,启动服务效果如图:
 
  1. 如果安装提示Failed to execute start task,解决方法:停止ICS(运行-->services.msc找到Internet Connection Sharing (ICS)服务,改成手动启动或禁用)
  2. 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

安装完成,访问地址效果如图:

 
  1. ActiveMQ后台管理地址:http://localhost:8161/admin,默认账号:admin,密码:admin
 

二、          C#ActiveMQ实现推送接收数据

  1. 添加ActiveMQ类库Apache.NMS.dll、Apache.NMS.ActiveMQ.dll
 
  1. 定义传值参数类: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; }

}

}

  1. 初始化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#推送和接收消息相关推荐

  1. 微信小程序消息推送、接收消息事件、发送客服消息

    文档地址消息推送 | 微信开放文档 接收消息和事件 | 微信开放文档 发送客服消息 | 微信开放文档 代码参考 public function xcxToken(){$signature = $thi ...

  2. mysql消息队列推送到redis_消息队列redis部署,以及在实际场景中使用 – 小雨点来了...

    接上一节的继续,上一节说过了因近期接手其他部门项目,发现诸多问题.关于mysql 并发 处理已经讲过,没有看过的同学可以去这里:http://xytong.cc/archives/87 . 本节讲讲如 ...

  3. flask websocket json_Win10环境下使用Flask配合Celery异步推送实时/定时消息/2020年最新攻略...

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask 1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Ce ...

  4. python 版本的 OneNET物联网平台——HTTP推送数据接收

    OneNET物联网平台--HTTP推送数据接收 flask框架 写的python版本的 HTTP推送, 消息加密方式:安全模式 用的onenet平台的模拟数据,接受成功!!! # coding:utf ...

  5. Java推送IOS通知消息

    Java推送IOS通知消息 公司需要做IOS消息推送,我负责后台代码的实现.写这篇文章也是将我踩坑得来的结果记录一下,分享一下. APN介绍 Apple 推送通知服务(APNs) 是远程通知功能的核心 ...

  6. Docker最全教程之使用.NET Core推送钉钉消息(二十)

    前言 上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明. 最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreR ...

  7. 微信公众号-java上传图片素材到微信服务器基于事件推送两条消息

    微信公众号-java上传图片素材到微信服务器&基于事件推送两条消息 场景:基于微信扫码登录/关注事件,向用户推送两条消息. 分析:翻阅了微信开发者文档和一些其他资料发现,公众号针对用户关注/扫 ...

  8. 微信公众号推送多图文消息,直接跳转至外部链接(wxJava)

    文章目录 前言 一.解决思路 1.公众号后台设置 2.客服消息 3.google & baidu 寻找答案 4.关注后自动推送(正解) 总结 前言 需求:用户关注公众号后,如何在微信推送的多图 ...

  9. 企业微信应用设置可信域名_企业微信应用变更域名,可信域名只能设置一个导致原有推送的模板消息(旧域名)直接提示需使用应用可信域名...

    事故过程: 域名从A变成B后,旧有的推送消息点击直接提示 [redirect_uri需要使用应用可信域名,原有的模板消息推送中带有旧的域名地址A], 而此时,企业微信管理后台该应用的可信域名已经变成了 ...

  10. Android消息推送:第三方消息推送平台详细解析

    前言 消息推送在Android开发中应用的场景是越来越多了,比如说电商产品进行活动宣传.资讯类产品进行新闻推送等等,如下图: 本文将介绍Android中实现消息推送的第三方推送的详细解决方案 阅读本文 ...

最新文章

  1. 优化调整Oracle 8i数据库
  2. FZOJ 2014年11月份月赛 ytaaa(dp + RMQ)
  3. 跨浏览器兼容的HTML5视频音频播放器
  4. Spring依赖注入@Autowired原理解析(一)之寻找需要注入的属性
  5. WinRAR加密压缩冒充GlobeImposter勒索病毒 安全专家轻松解密
  6. 阻击 瑞星 和 雅虎助手 的 SVOHOST.exe(第2版)
  7. 大话卷积神经网络(CNN)
  8. M1芯片Mac mini 2K显示器开启HiDpi
  9. mysqldump关于--set-gtid-purged=OFF的使用
  10. 使用laravel搭建博客网站-博客的注册功能
  11. android 磁贴布局,拼图酱 - 通过布局、磁贴、滤镜等元素重新组合照片,充满乐趣 - Android 应用 - 图像 - 【最美应用】...
  12. linux 运行.deb,Ubuntu下如何用命令行运行deb安装包
  13. 呕心沥血互联网产品经理巨作
  14. 全球运输工业的升级会带来什么
  15. 新能源智慧路灯充电桩可行性分析
  16. Docker快速安装部署
  17. 当Android遇上设计模式之代理(Proxy)模式
  18. Win10任务栏应用图标为空白页
  19. 微幅波的解析解求解及弥散方程的推导
  20. 金山办公2020笔试

热门文章

  1. 【图像处理】双边滤波算法(bilateral filter)和导向滤波算法(guided filter)
  2. gitlab提交代码
  3. 【Caffe安装】ImportError: No module named caffe 的解决方案
  4. Python基于wordnet实现词语相似度计算分析
  5. centos7全盘备份到本地_centos7磁盘备份和还原
  6. react 翻书效果_react.js 翻页插件实例代码
  7. python中if语句的实例_如何在Python中的if语句中调用某个函数?
  8. python实现一款编译型语言_Java,Python谁是编译型语言,谁是解释型语
  9. a^x ≡1(mod n) Ord_n(a)=x什么意思
  10. C++ 迭代器是指针吗