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之队列的生产者和消费者(一)相关推荐

  1. Java实现ActiveMQ之主题的生产者和消费者(二)

    前言 假如:三个消费者同时关注并且订阅了一个公众号,公众号同时推送N份消息的时候,他们三个各收到的是N份,还是先到先得到全部,还是均分消息呢? 1.创建maven项目,导入pom.xml依赖包 < ...

  2. java 线程同步的list_java线程生产者与消费者实例(使用List实现同步)

    过多的线程同步可能会造成死锁 死锁通俗来讲就是两个或者两个以上线程,占用了对方下一步所需要的资源,多个线程僵持都无法结束任务的状态 生产者和消费者模式是一个多线程同步的经典案例 它利用信号灯来判断线程 ...

  3. Linux系统编程40:多线程之基于环形队列的生产者与消费者模型

    文章目录 (1)什么是信号量 (2)与信号量相关的操作 (3)基于环形队列的生产者与消费者模型-信号量(单消费者单生产者) (1)什么是信号量 前面的叙述中,我们通过锁保证了每次只有一个线程进入临界区 ...

  4. 【JAVA多线程】如何解决一个生产者与消费者问题

    如何解决一个生产者与消费者问题 生产者与消费者问题是多线程同步的一个经典问题.生产者和消费者同时使用一块缓冲区,生产者生产商品放入缓冲区,消费者从缓冲区中取出商品.我们需要保证的是,当缓冲区满时,生产 ...

  5. java的知识点34——线程通信 || 生产者与消费者问题

    线程通信 应用场景:生产者和消费者问题 • 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 • 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待, ...

  6. java基础—线程间的通讯 生产者与消费者

    线程间的的通讯  生产者与消费者 public class TestDemos3 {public static void main(String[] args){Res r = new Res();I ...

  7. java线程(2)——模拟生产者与消费者

    前言: 我们都听说过生产者和消费者的例子吧,现在来模拟一下.生产者生产面包,消费者消费面包.假定生产者将生成出来的面包放入篮子中,消费者从篮子中取.这样,当篮子中没有面包时,消费者不能取.当篮子满了以 ...

  8. JAVA——利用wait和notify实现生产者和消费者

    经典的消费者和生产者的的实现: 注意事项: 1:在循环里面用wait(),因为当线程获得了锁,但是有可能还没有满足其他条件: 2:公用的缓冲池要用锁机制: 1 package demo; 2 3 im ...

  9. Java消息中间件(activeMQ)

    文章目录 **第一章 消息中间件概述** 1. 消息中间件的好处 2. 什么是消息中间件 3. 什么是JMS(规范) 4. 什么是AMQP(协议) 5. 几个常用消息中间对比 **第二章 初始JMS* ...

最新文章

  1. 独家 | 一文读懂机器学习中的贝叶斯统计学
  2. SAP成都研究院郑晓霞:Shift Left Testing和软件质量保证的一些思考
  3. CentOS 初体验二十二:redis常用命令:Hash
  4. asp.net mvc 使用bootstrap的模态框插件modal
  5. python极简应用_30个Python常用极简代码,拿走就用
  6. Markdown图片并排展示、图注对齐
  7. HDU 6321(状压dp)
  8. 限制新闻标题字数输出并用省略号代替
  9. Axure8.0的注册码
  10. 2021年PMP考试模拟题2(含答案)
  11. android listview阻尼效果,自定义阻尼效果listview
  12. 小葵花妈妈课堂之nginx必须要了解的优化九部曲!
  13. 【软件测试】以闭环思维解决BUG复现率高问题
  14. ztree树与列表名字获取
  15. 音频编码方案之间音质比较(AAC,MP3,WMA等)
  16. 34. 在排序数组中查找元素的第一个和最后一个位置
  17. Educational Codeforces Round 123 (Rated for Div. 2)(ABCDE)
  18. 京东自建数据中心核心技术解密——基础设施篇
  19. 支付开发(七)----支付宝开发之手机网站支付(H5支付)
  20. python ajax爬虫 --36Kr为例

热门文章

  1. 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理
  2. java+arrayblockquene_Java源码分析-ArrayBlockingQueue
  3. 信息学奥赛一本通 1153:绝对素数
  4. 元素(HYSBZ-2460)
  5. 扔盘子(51Nod-1279)
  6. VMweare 典型创建 Kali Linux 虚拟机
  7. 4.6.2 定义内表
  8. 3 MIGO采购订单收货报错-表T169P,表目S001不存在
  9. python调用函数_Python 函数中的 4 种参数类型
  10. bash 将二进制转换为十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...