Session 中的四種type
- AUTO_ACKNOWLEDGE=1 自動確認
- CLIENT_ACKNOWLEDGE=2 客戶端手動確認
- DUPS_OK_ACKNOWLEDGE=3 自動批量確認
- SESSION_TRANSACTED =0 事務提交併確認
public class ActiveMQTest {
// 編寫消息發送方 (生產者)
@Test
public void test1() throws JMSException {
//創建連接工廠對象
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://ip地址:61616");
//從工廠中獲取一個連接對象
Connection connection = connectionFactory.createConnection();
//連接MQ服務
connection.start();
//獲取session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//通過session對象常見Topic
Topic topic = session.createTopic("MainTopic");
//通過session對象創建消息的發送者
MessageProducer producer = session.createProducer(topic);
//通過session 創建消息對象
TextMessage message = session.createTextMessage("ping111");
//發送消息
producer.send(message);
//關閉相關資源
producer.close();
session.close();
connection.close();
}
// 編寫消息接受方 (消費者)
@Test
public void test2() throws JMSException {
//創建連接工廠對象
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://ip地址:61616");
//從工廠中獲取一個連接對象
Connection connection = connectionFactory.createConnection();
//連接MQ服務
connection.start();
//獲取session
final Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//通過session對象常見Topic
Topic topic = session.createTopic("MainTopic");
//通過session對象創建消息的發送者
MessageConsumer consumer = session.createConsumer(topic);
//指定消息監聽器
//當監聽的topic中存在消息,會自動執行
consumer.setMessageListener(message -> {
TextMessage textMessage = (TextMessage) message;
try {
if (textMessage.getText().equals("ping")){
System.err.println("消費者接受到====>>>>> : " + textMessage.getText());
//客戶端手動應答
message.acknowledge();
}else {
System.err.println("消息處理失敗了。。。");
//通知mq進行消息重發,最多重發6次
session.recover();
//模擬消息處理失敗
int i = 1/0;
}
} catch (JMSException e) {
e.printStackTrace();
}
});
while (true){
}
}
}