ActiveMQ消息中间件
程序员文章站
2022-07-01 15:31:54
...
对于这次ActiveMQ的学习,故做一次学习记录,面试的时候能翻翻看看。
先导入pom.xml
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.9</version>
</dependency>
生产者代码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("message_queue");
javax.jms.MessageProducer producer = session.createProducer(queue);
for(int i=0;i<10;i++){
producer.send(session.createTextMessage("消息队列【"+i+"】"));
}
session.commit();
connection.close();
消费者代码
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
// 第一个参数代表是否开启事务,第二个参数代表传递参数
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Queue message_queue = session.createQueue("message_queue");
MessageConsumer consumer = session.createConsumer(message_queue);
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
System.err.println("通道1:"+textMessage.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
});
那些情况会引起消息重发?
1.消费端开启事务,调用了 session.rollback();
2:消费端开启事务,没有调用session.commit();
3:消费的使用Session.CLIENT_ACKNOWLEDGE传递模式,调用session.recover();
消息重发时间间隔和重发次数
默认时间间隔:1000ms
默认重发次数:6
消费者可以自定义重发策略,次数达到后,将进入ActiveMQ.DLQ(死信队列)
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
// 设置重试次数,这里为2,实际为3次重试,重试还没成功接收到消息,直接进入死信队列
redeliveryPolicy.setMaximumRedeliveries(2);
// 设置初始重试等待时间
redeliveryPolicy.setInitialRedeliveryDelay(2000);
// 设置重发策略
factory.setRedeliveryPolicy(redeliveryPolicy);
推荐阅读
-
微信小程序模板消息限制实现无限制主动推送的示例代码
-
川外成都学院可能成为公办大学吗?川外成都学院更名大学?(2021最新消息)
-
宁夏即将改名的大学:矿大银川学院改宁夏科技学院?附转设最新消息
-
2021年宁夏独立学院转设最新消息:中国矿业大学银川学院转设后的名字叫什么?
-
四川大学锦城学院转设最新消息(改名锦城学院):四川大学锦城学院转公办还是民办?
-
山东财经大学燕山学院转设公办改名最新消息-官宣山东独立学院转设(截至2021年1月)
-
四川外国语大学成都学院与四川大学锦城学院转设更名大学?附转设最新消息
-
钉钉群自定义机器人消息Python封装的实例
-
python3+pyqt5+itchat微信定时发送消息的方法
-
.NetCore利用BlockingCollection实现简易消息队列