MSMQ?不,太弱了。使用ActiveMQ实现消息队列服务
来源:互联网 发布:域名和服务器的关系 编辑:程序博客网 时间:2024/05/21 09:09
关于MSMQ和ActiveMQ的基础功能就不再描述。这里说说ActiveMQ的比较实用的一个功能:ScheduledMessage
ScheduledMessage可以理解为一个调度功能,可以延时、重复发送消息。我就是采用这种方案来实现Web中的定时功能和系统中不同模块之间的消息传递。
这里主要说一下延时消息的新增、删除操作(坑啊官方API里面貌似没有这一个功能的描述,只有一全案例,而案例上所用到的东西,在NuGet上下载的dll根本没有这一个类)。
要使用Scheduled功能需要在服务端conf/activemq.xml中把Scheduled打开,根据官网上的提示,是需要在broker上面添加一个schedulerSupport="true"属性,配置好后,重启服务。
<!--
The <broker> element is used to configure the ActiveMQ broker.
-->
<broker schedulerSupport="true" xmlns="http://activemq.apache.org/schema/core"
延时消息发送:
IConnectionFactory factory = new ConnectionFactory("tcp://192.168.1.248:61616/"); using (IConnection connection = factory.CreateConnection()) { using (ISession session = connection.CreateSession()) { IMessageProducer prod = session.CreateProducer( new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("testing")); ITextMessage msg = prod.CreateTextMessage(); msg.Text = "这是一个延时消息"; msg.Properties.SetLong("AMQ_SCHEDULED_DELAY", 3600000); //这里设置一个延时发送,后面是延时单位是ms, prod.Send(msg); Console.WriteLine(msg.NMSMessageId);//发送成功后,NMSMessageId将会被赋值,如果需要删除单条消息需要把这个记录下来 } }发送成功后,在服务器上可以看到这个延时消息
删除这个延时消息:
IConnectionFactory factory = new ConnectionFactory("tcp://192.168.1.248:61616/"); using (IConnection connection = factory.CreateConnection()) { using (ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge)) { IDestination management = session.GetDestination("ActiveMQ.Scheduler.Management"); connection.Start(); IMessageProducer producer = session.CreateProducer(management); IMessage request = session.CreateMessage(); request.Properties.SetString("AMQ_SCHEDULER_ACTION", "REMOVE");//指定当前消息是来删除某个延时消息 request.Properties.SetString("scheduledJobId", id);//指定要删除的延时消息的ID、这个ID就是刚刚发送成功时返回的ID producer.Send(request); } }
参考资料
http://www.programcreek.com/java-api-examples/index.php?api=javax.jms.MessageListener
http://activemq.apache.org/maven/apidocs/src-html/org/apache/activemq/ScheduledMessage.html#line.64
- MSMQ?不,太弱了。使用ActiveMQ实现消息队列服务
- MSMQ 微软消息队列服务
- C#实现消息队列MSMQ
- PHP中使用ActiveMQ实现消息队列
- ActiveMQ实现消息队列
- MSMQ消息队列与WCF MSMQ的认识与使用
- IPC之 - .Net 消息队列(MSMQ) 使用
- 消息队列MSMQ的使用实例
- .Net消息队列MSMQ的使用实例
- 消息队列MSMQ的使用实例
- C#中使用Windows消息队列服务(MSMQ)简单示例
- MSMQ--消息队列
- MSMQ--消息队列
- MSMQ(消息队列)
- 消息队列 MSMQ
- 消息队列(MSMQ)
- 消息队列MSMQ
- 消息队列(MSMQ)学习
- 泛型
- vmware虚拟机安装ghost版xp-黑屏错误及解决方法
- elasticsearch初始化之配置文件读取
- Memcached(一)Memcached特点和简单安装
- 【Android开发基础】应用界面主题Theme使用方法
- MSMQ?不,太弱了。使用ActiveMQ实现消息队列服务
- DOM对象触发事件的一些解
- AndroidFramework之Volley详细解析 定制Request (三)
- 胡笳十八拍
- pointer on C programming exercise P6.18 Q3
- uva1509(回溯)
- leetcode——Gas Station
- AndroidFramework之Volley源码详细解析 (四)
- 加载远程图片,可设置保存到内存卡