Java实现ActiveMQ之队列的生产者和消费者(一)
1、创建maven项目,导入pom.xml依赖包
<!--activemq所需依赖jar配置-->
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.15.9</version>
</dependency>
2、JmsProduce.java 生产者
/*** 生产者*/
public class JmsProduce {//工厂连接地址private static final String ACTIVEMQ_URL = "tcp://192.168.150.131:61616";//队列名称private static final String QUEUE_NAME = "queue01";public static void main(String[] args) throws JMSException {//1、创建连接工厂,按照给定的url,采用默认的用户名和密码ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);//2、通过连接工厂获得连接connection并启动访问Connection connection = activeMQConnectionFactory.createConnection();connection.start();//3、创建会话 两个参数:第一个(事务),第二个(签收)Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//4、创建目的地(队列还是主题),先创建队列//Destination destination = session.createQueue(QUEUE_NAME); //父接口 目的地:(包括队列和主题)Queue queue = session.createQueue(QUEUE_NAME);//5、创建消息的生产者MessageProducer messageProducer = session.createProducer(queue);//6、通过使用消息生产者生产10条消息发送到MQ队列里面for (int i = 1; i <=10 ; i++) {//7、创建消息TextMessage textMessage = session.createTextMessage("msg---" + i);//理解为一个字符串//8、通过消息生产者(MessageProducer)发送给MQmessageProducer.send(textMessage);}//9、关闭资源messageProducer.close();session.close();connection.close();System.out.println("消息发送完成!");}
}
3、JmsConsumer.java 消费者 (同步阻塞方式)
/*** 消费者 (同步阻塞方式)*/
public class JmsConsumer {//工厂连接地址private static final String ACTIVEMQ_URL = "tcp://192.168.150.131:61616";//队列名称private static final String QUEUE_NAME = "queue01";public static void main(String[] args) throws JMSException {//1、创建连接工厂,按照给定的url,采用默认的用户名和密码ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);//2、通过连接工厂获得连接connection并启动访问Connection connection = activeMQConnectionFactory.createConnection();connection.start();//3、创建会话 两个参数:第一个(事务),第二个(签收)Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//4、创建目的地(队列还是主题),先创建队列//Destination destination = session.createQueue(QUEUE_NAME); //父接口 目的地:(包括队列和主题)Queue queue = session.createQueue(QUEUE_NAME);//5、创建消费者MessageConsumer messageConsumer = session.createConsumer(queue);while (true){//消费方式: 死等receive()和 超时等receive(5000L)TextMessage textMessage = (TextMessage) messageConsumer.receive(5000L); //装换类型,同一种格式if(null != textMessage){System.out.println("消费者接受到消息:"+textMessage.getText());}else {break;}}//6、倒着关闭资源messageConsumer.close();session.close();connection.close();}
}
4、JmsConsumerMonitor.java 消费者 异步非阻塞方式(监听方式)
/*** 消费者 异步非阻塞方式(监听方式)*/
public class JmsConsumerMonitor {//工厂连接地址private static final String ACTIVEMQ_URL = "tcp://192.168.150.131:61616";//队列名称private static final String QUEUE_NAME = "queue01";public static void main(String[] args) throws JMSException, IOException {System.out.println("我是2号消费者......");//1、创建连接工厂,按照给定的url,采用默认的用户名和密码ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);//2、通过连接工厂获得连接connection并启动访问Connection connection = activeMQConnectionFactory.createConnection();connection.start();//3、创建会话 两个参数:第一个(事务),第二个(签收)Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//4、创建目的地(队列还是主题),先创建队列//Destination destination = session.createQueue(QUEUE_NAME); //父接口 目的地:(包括队列和主题)Queue queue = session.createQueue(QUEUE_NAME);//5、创建消费者MessageConsumer messageConsumer = session.createConsumer(queue);//6、通过监听的方式messageConsumer.setMessageListener(new MessageListener(){@Overridepublic void onMessage(Message message) {if(null != message && message instanceof TextMessage){TextMessage textMessage = (TextMessage) message;try {System.out.println("消费者接受到消息:"+textMessage.getText());} catch (JMSException e) {e.printStackTrace();}}}});System.in.read(); //保证控制台不灭,一直输出messageConsumer.close();session.close();connection.close();}
}
5、两个消费者监听着同一个队列:效果图
当生产者发送消息的时候,两个消费者消费方式类似于轮训的方式,一人消费一半
控制台打印:
Java实现ActiveMQ之队列的生产者和消费者(一)相关推荐
- Java实现ActiveMQ之主题的生产者和消费者(二)
前言 假如:三个消费者同时关注并且订阅了一个公众号,公众号同时推送N份消息的时候,他们三个各收到的是N份,还是先到先得到全部,还是均分消息呢? 1.创建maven项目,导入pom.xml依赖包 < ...
- java 线程同步的list_java线程生产者与消费者实例(使用List实现同步)
过多的线程同步可能会造成死锁 死锁通俗来讲就是两个或者两个以上线程,占用了对方下一步所需要的资源,多个线程僵持都无法结束任务的状态 生产者和消费者模式是一个多线程同步的经典案例 它利用信号灯来判断线程 ...
- Linux系统编程40:多线程之基于环形队列的生产者与消费者模型
文章目录 (1)什么是信号量 (2)与信号量相关的操作 (3)基于环形队列的生产者与消费者模型-信号量(单消费者单生产者) (1)什么是信号量 前面的叙述中,我们通过锁保证了每次只有一个线程进入临界区 ...
- 【JAVA多线程】如何解决一个生产者与消费者问题
如何解决一个生产者与消费者问题 生产者与消费者问题是多线程同步的一个经典问题.生产者和消费者同时使用一块缓冲区,生产者生产商品放入缓冲区,消费者从缓冲区中取出商品.我们需要保证的是,当缓冲区满时,生产 ...
- java的知识点34——线程通信 || 生产者与消费者问题
线程通信 应用场景:生产者和消费者问题 • 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 • 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待, ...
- java基础—线程间的通讯 生产者与消费者
线程间的的通讯 生产者与消费者 public class TestDemos3 {public static void main(String[] args){Res r = new Res();I ...
- java线程(2)——模拟生产者与消费者
前言: 我们都听说过生产者和消费者的例子吧,现在来模拟一下.生产者生产面包,消费者消费面包.假定生产者将生成出来的面包放入篮子中,消费者从篮子中取.这样,当篮子中没有面包时,消费者不能取.当篮子满了以 ...
- JAVA——利用wait和notify实现生产者和消费者
经典的消费者和生产者的的实现: 注意事项: 1:在循环里面用wait(),因为当线程获得了锁,但是有可能还没有满足其他条件: 2:公用的缓冲池要用锁机制: 1 package demo; 2 3 im ...
- Java消息中间件(activeMQ)
文章目录 **第一章 消息中间件概述** 1. 消息中间件的好处 2. 什么是消息中间件 3. 什么是JMS(规范) 4. 什么是AMQP(协议) 5. 几个常用消息中间对比 **第二章 初始JMS* ...
最新文章
- 独家 | 一文读懂机器学习中的贝叶斯统计学
- SAP成都研究院郑晓霞:Shift Left Testing和软件质量保证的一些思考
- CentOS 初体验二十二:redis常用命令:Hash
- asp.net mvc 使用bootstrap的模态框插件modal
- python极简应用_30个Python常用极简代码,拿走就用
- Markdown图片并排展示、图注对齐
- HDU 6321(状压dp)
- 限制新闻标题字数输出并用省略号代替
- Axure8.0的注册码
- 2021年PMP考试模拟题2(含答案)
- android listview阻尼效果,自定义阻尼效果listview
- 小葵花妈妈课堂之nginx必须要了解的优化九部曲!
- 【软件测试】以闭环思维解决BUG复现率高问题
- ztree树与列表名字获取
- 音频编码方案之间音质比较(AAC,MP3,WMA等)
- 34. 在排序数组中查找元素的第一个和最后一个位置
- Educational Codeforces Round 123 (Rated for Div. 2)(ABCDE)
- 京东自建数据中心核心技术解密——基础设施篇
- 支付开发(七)----支付宝开发之手机网站支付(H5支付)
- python ajax爬虫 --36Kr为例
热门文章
- 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理
- java+arrayblockquene_Java源码分析-ArrayBlockingQueue
- 信息学奥赛一本通 1153:绝对素数
- 元素(HYSBZ-2460)
- 扔盘子(51Nod-1279)
- VMweare 典型创建 Kali Linux 虚拟机
- 4.6.2 定义内表
- 3 MIGO采购订单收货报错-表T169P,表目S001不存在
- python调用函数_Python 函数中的 4 种参数类型
- bash 将二进制转换为十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...