ActiveMQ(二)———使用Quene来发送消息
摘要:点对点的发送消息,使用消息队列Queue。每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列,接收者在成功接收消息之后需向队列应答成功。
引入三个jar包,这些jar包在activeMQ的安装包中都有:
geronimo-j2ee-management_1.1_spec-1.0.1.jar
geronimo-jms_1.1_spec-1.1.1.jar
activemq-core-5.5.0.jar
消息生产者:
package com.ds.test.activemq.queue;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;public class Sender {private static final int SEND_NUMBER = 5;public static void main(String[] args) {// ConnectionFactory :连接工厂,JMS 用它创建连接ConnectionFactory connectionFactory;// Connection :JMS 客户端到JMS Provider 的连接Connection connection = null;// Session: 一个发送或接收消息的线程Session session;// Destination :消息的目的地;消息发送给谁.Destination destination;// MessageProducer:消息发送者MessageProducer producer;// TextMessage message;// 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jarconnectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");try {connection = connectionFactory.createConnection();connection.start();session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);destination = session.createQueue("FirstQueue");producer = session.createProducer(destination);sendMessage(session, producer);session.commit();} catch (Exception e) {e.printStackTrace();} finally {try {if (null != connection)connection.close();} catch (Throwable ignore) {}}}public static void sendMessage(Session session, MessageProducer producer)throws Exception {for (int i = 1; i <= SEND_NUMBER; i++) {TextMessage message = session.createTextMessage("ActiveMq 发送的消息" + i);// 发送消息到目的地方System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);producer.send(message);}}
}
消息消费者:
package com.ds.test.activemq.queue;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver {public static void main(String[] args) {// ConnectionFactory :连接工厂,JMS 用它创建连接ConnectionFactory connectionFactory;// Connection :JMS 客户端到JMS Provider 的连接Connection connection = null;// Session: 一个发送或接收消息的线程Session session;// Destination :消息的目的地;消息发送给谁.Destination destination;// 消费者,消息接收者MessageConsumer consumer;connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");try {connection = connectionFactory.createConnection();connection.start();session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);destination = session.createQueue("FirstQueue");consumer = session.createConsumer(destination);while (true) {//接收在指定的超时间隔内到达的下一个消息TextMessage message = (TextMessage) consumer.receive(1000*100);if (null != message) {System.out.println("收到消息" + message.getText());} else {break;}}} catch (Exception e) {e.printStackTrace();} finally {try {if (null != connection)connection.close();} catch (Throwable ignore) {}}}
}
查看消息情况: http://localhost:8161/admin/queues.jsp
ActiveMQ(二)———使用Quene来发送消息相关推荐
- ibm linux mq 发送消息_RabbitMq、ActiveMq、Kafka和Redis做Mq对比
一.RabbitMq RabbitMQ是一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能.可伸缩性出名的Erlang写成.RabbitMQ Se ...
- activeMQ高并发发送消息异常解决方法
高并发发送消息异常解决方法: 现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停 止: javax.jms.JMSException:Could not conne ...
- ActiveMQ入门-发送消息机制的介绍
消息队列的几种角色:消息队列是系统之间发消息的,会有消息的发送者(生产者),会有消息的接受者(消费者),还有一个用来存储并且发送消息的容器,这个容易叫消息队列 ActiveMQ发消息的方式有两种:Qu ...
- php redis微信发红包,高阶篇二 使用Redis队列发送微信模版消息
# 高阶篇二 使用Redis队列发送微信模版消息 > 此命令行执行任务的方法类比较复杂 他需要命令行运行才会有效 > 命令行源码以及创建方法 参见上节 https://www.kanclo ...
- ActiveMQ使用spring JmsTemplate发送消息(一)
下载地址:http://activemq.apache.org/download-archives.html 解压 启动bin\activemq.bat 生产者接口: public interface ...
- ActiveMQ中消费者是如何接收消息的(二)
上篇文章大致讲述了同步消费者和异步消费者接收消息的异同(详见<ActiveMQ中消费者是如何接收消息的(一)>http://manzhizhen.iteye.com/blog/209413 ...
- springBoot使用activeMQ发送消息,错误This class is not trusted to be serialized as ObjectMessage payload.
原因是因为他不支持 对象作为消息进行发送.但是他支持string,byte,序列化,数字类型. 所以将对象转换为byte数组,在转换为对象解析即可 附上相关转换代码. 转换类的名字我叫做DataPro ...
- Redis源码解析:21sentinel(二)定期发送消息、检测主观下线
六:定时发送消息 哨兵每隔一段时间,会向其所监控的所有实例发送一些命令,用于获取这些实例的状态.这些命令包括:"PING"."INFO"和"PUBLI ...
- java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...
之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...
最新文章
- vue父组件调用子组件的方法
- IBatis手动刷新缓存
- 这 9 个 Java 开源项目 yyds,你知道几个?
- MVP on Android
- PHP配置虚机权限不足的问题
- php mysql 分组 分页_简单的PHP+Mysql实现分页
- Nacos源码NacosServiceRegistryAutoConfiguration
- 2014年科目三智能化考试十大必知事项
- java迭代器_74.Java迭代器
- 用小乌龟git解决冲突之后,再提交,出现自己没用动过的文件
- linux hotplug 机制,佐须之男的博客- 跟着佐大学Lede/OpenWrt开发入门培训班讲义-18 OpenWrt hotplug 机制分析...
- 怎么把mp3转换成wav?
- 网络系统管理赛项之Debian七. 2021年全国职业院校技能大赛将挑选各省1人或1组队伍参赛
- OFDM专题之如何计算OFDM一个符号的功率,功率谱密度
- kaldi教程_赠书 | 全球稀缺的Kaldi学习资料,《Kaldi语音识别实战》给补上了
- CDMA移动通信网的关键技术(转)
- LeetCode 9. 回文数 Palindrome Number
- 数据分析师是青春饭吗?年龄影响很大吗?
- jinja2中if和for的使用
- element plus 引入icon
热门文章
- 99%游戏开发者都不知道的游戏运营词汇
- 强烈推荐,B站最强学习资源汇总(数据科学,机器学习,python)
- 使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频
- java try的用法_Java try和catch的使用
- 如何从Set中任意(随机)取出一个元素
- 计算机科学计算课后题答案,计算机系统习题及答案.doc
- Docker ~ 从入门到实践
- SQL server 2012 附加数据库
- 有没有会的指点一下啊
- “520”学历过滤不出爱情,论天津专升本对另一半爱情的重要性