- 创建connection工厂
- 用工厂创建connection
- 用connection 创建 session
- session 创建 queue 或者topic
- session 创建 produce
- session 创建 message 我们在创建消息的时候是多次的创建
for (int i = 1; i <= 3; i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("textMessage:"+i);
producer.send(textMessage);
}
接收的时候,还是用原来的消息接收
while (true) {
TextMessage receive = (TextMessage) consumer.receive();
if (receive!=null) {
System.out.println(receive.getText());
}else {
break;
}
}
8161 web 页面的queue中的四个参数
1,还有多少没消费的
2,有多少消费者
3,入队一共多少 从一开始,到现在
4,出队列的一共多少。 从一开始,到现在
Producer 中包含的两个对象。一个是Queue,一个是Message
在producer的时候。我们需要创建message
但是在consumer的时候。我们直接从队列中取就行了
1,receiver() 永远等待 也就是不见不散
receiver(4000l) 等待四秒,如果没有,就退出了。开始运行,到4秒后,如果没有就走人了
这种就是同步阻塞的方式。没有接到消息,一直阻塞
consumer.setMessageListener(); 之前是consumer.receive(),这种方式是监听的方式,也就是异步。zhu’y
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if (message != null && message instanceof TextMessage) {
TextMessage tm = (TextMessage) message;
try {
System.out.println("已经收到: "+tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
System.in.read();//去mq的连接还没有建立 (需要时间建立),就被关闭了,更不用说消费了。
以上是第二种消费的方式。监听器也是自动获取message。
这个是异步非阻塞的方式,当消息到达之后,系统自动调用监听器MessageListener的onMessage(Message message
)方法。
两个消费者的情况
①先启动生产者,然后启动一个消费者,再启动一个消费者。
结果是什么样呢: 第一个消费者把所有的消息都消费了,第二个什么也没得到。
2️⃣ 先启动两个消费者,再启动生产者结果是什么样呢?
两个消费者平均分。
也就是队列的信息只能被消费一次,如果多个消费者,就是平均分配的。
练舞不练功,到老一场空,基础不稳,地动山摇。慢慢来才比较快