ActiveMQ消息队列的应用 C#客户端 Web后端
来源:互联网 发布:背包装什么 知乎 编辑:程序博客网 时间:2024/05/17 04:42
写在前面
整个项目就是实现C#客户端往消息队列生产10W条消息,Ajax Web读取这10W条消息,后台采用Tomcat。
项目搭建环境:
- jdk1.7.0_04
- MyEclipse10.6
- apache-activemq-5.14.0-bin.zip
- Apache.NMS.ActiveMQ-1.7.2-bin.zip
- VS2013
后台搭建,Ajax Web读取消息实现可见上篇文章点击打开链接,本项目在此基础上。
C#客户端实现
VS2013新建一个C#控制台应用程序,项目中添加两个dll引用,一个是D:\Apache.NMS.ActiveMQ-1.7.2-bin\lib\Apache.NMS\net-4.0目录下的Apache.NMS.dll,另一个是D:\Apache.NMS.ActiveMQ-1.7.2-bin\build\net-4.0\debug目录下的Apache.NMS.ActiveMQ.dll。项目中加入
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Apache.NMS;using Apache.NMS.ActiveMQ;//发布订阅模式,一个生产者多个消费者namespace NmsProducer2{ class Program { static void Main(string[] args) { try { //Create the Connection Factory IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/"); //这里可以写tcp://192.168.1.111:61616的形式连接其他服务器上的ActiveMQ服务器 using (IConnection connection = factory.CreateConnection()) { //Create the Session using (ISession session = connection.CreateSession()) { //Create the Producer for the topic/queue IMessageProducer prod = session.CreateProducer( new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("SecondTopic")); //Send Messages int i = 100000; //while (!Console.KeyAvailable) while(i>0) { ITextMessage msg = prod.CreateTextMessage(); msg.Text = "msg" + i.ToString(); Console.WriteLine("Sending: " + i.ToString()); prod.Send(msg, Apache.NMS.MsgDeliveryMode.NonPersistent, Apache.NMS.MsgPriority.Normal, TimeSpan.MinValue); //System.Threading.Thread.Sleep(1000); i--; } } } Console.ReadLine(); } catch (System.Exception e) { Console.WriteLine("{0}", e.Message); Console.ReadLine(); } } }}
测试
首先,启动ActiveMQ消息队列,其次,再启动后台web工程,然后运行C#客户端往消息队列生产10W条消息,浏览器输入http://localhost:8161/admin/topics.jsp 选择“Topics” 查看消息队列,
浏览器输入http://localhost:8080/mqajax/,开始从消息队列中取消息
写在最后
相比与上篇文章介绍,web后台的index.html做了一些改动,具体代码如下
<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><script type="text/javascript" src="js/jquery-1.4.2.min.js"></script><script type="text/javascript" src="js/amq_jquery_adapter.js"></script><script type="text/javascript" src="js/amq.js"></script><script type="text/javascript"> var amq = org.activemq.Amq; amq.init({ uri: 'amq', //AjaxServlet所配置对应的URL logging: true,//激活日志记录 timeout: 2, //保持连接时长,单位为秒 clientId:(new Date()).getTime().toString() //防止多个浏览器窗口标签共享同一个JSESSIONID, 有这一句打开多个tab就是多个connection }); //接收消息 var myHandler = function(message){ $("#msgDiv").append(message); $("#msgDiv").append("<br>"); //$("#msgDiv").append(message.getAttribute('name')+":"+message.getAttribute('msg')); //$("#msgDiv").append("<br>"); } //此处只能使用topic,使用"channel:MY.NAME"无法实现从QUEUES取消息,具体原因还没找到 amq.addListener("anynameid","topic://SecondTopic",myHandler); //"topic://MY.NAME" or "channel://MY.NAME" //amq.addListener("channel","topic://SecondQueue",myHandler);/*//发送消息 function send(){ var nickname = $("#nickname").val(); var content = $("#content").val(); //var msg = nickname + " : " +content; //amq.sendMessage("topic://SecondTopic","<message>"+msg+"</message>"); //Message是任意格式化好的XML或者被编码为XML内容的纯文本 amq.sendMessage("topic://SecondTopic", "<message name='" + nickname + "' msg='" + content + "'/>"); } */</script></head><body><b>多人聊天室</b><hr><div style="height:300px;width:600px;border:block;overflow:auto" id="msgDiv"></div>昵称:<input type="text" id="nickname">内容:<input type="text" id="content"><button onclick="send()">发送</button></body></html>
完整项目下载
producer
consumer
参考
http://activemq.apache.org/nms/index.html
http://blog.csdn.net/peterpan_hai/article/details/52230911
问题
目前ajax前台只能只用topic,无法使用“channel:MY.NAME”从QUEUES取消息,具体原因还没找到,请知道的朋友不吝指出,非常感谢!
解决问题
上个问题原因已发现,因为客户端插入消息设置了selector,所以web端amq.addListener()也要设置相应的selector才能收到消息。
0 0
- ActiveMQ消息队列的应用 C#客户端 Web后端
- ActiveMQ的最简单应用-队列消息
- ActiveMQ消息队列的使用及应用
- ActiveMQ消息队列的使用及应用
- ActiveMQ消息队列的使用及应用
- ActiveMq C#客户端 消息队列的使用(存和取)
- 【ActiveMq】ActiveMQ消息队列的使用及应用
- 消息队列入门(四)ActiveMQ的应用实例
- ActiveMQ消息队列的单机使用及应用(一)
- ActiveMQ消息队列的集群安装及应用(二)
- JMS应用之消息队列ActiveMQ的基本运用
- 工业物联网或系统集成中应用消息队列(ActiveMQ,C#的demo)的场景全面分析
- activeMQ消息队列消息的发送
- ActiveMQ的消息队列的介绍
- activeMQ死消息队列的管理
- java消息队列ActiveMQ的简单使用
- java消息队列ActiveMQ的简单使用
- 【消息队列MQ】ActiveMq的通信方式
- 关于ListView中的item包含RadioButton时出现的混乱
- XmlSerializer 对象的Xml序列化和反序列化
- 使用java代码来实现dvd管理系统
- Android进阶系列3—再说View的事件分发
- Pro Android学习笔记(一四七):拖拽(1):通过MotionEvent来实现
- ActiveMQ消息队列的应用 C#客户端 Web后端
- placeholder颜色
- HDU 1599 find the mincost route(floyd算法)
- Android中HttpURLConnection获取网址源码,子线程里更新UI
- MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 main,该符号在函数 __tmainCRTStartup 中被引用
- Android:视频播放器相关问题汇总(草稿)
- 3361数据结构实验之图论四:迷宫探索
- QT中的随机函数的用法
- 如何在Mac上安装nginx以及所需模块