此文記錄自己在使用ActiveMQ的時候一下用法和心得。
p2p:模式
在這個模式中,一個消息隊列可以有多個訂閱者,一條消息只會被一個訂閱者消費,多個訂閱者之間是競爭關係。使用這種特性,可以構建分佈式的處理服務,比如訂單系統,一個訂單只需要處理一次,當訂單量很大的時候,可以上多個訂單處理服務,多個訂單處理服務挨個讀取消息隊列裏面的消息進行處理。
假設A和B都是兩個訂單處理服務,a:01234567898是訂單,A和B都是用P2P模式,此時AB處理的方式大概如下圖:
A接收消息:{a:0}
B接收消息:{a:1}
A接收消息:{a:2}
B接收消息:{a:3}
A接收消息:{a:4}
B接收消息:{a:5}
A接收消息:{a:6}
B接收消息:{a:7}
A接收消息:{a:8}
B接收消息:{a:9}
代碼中處理消息
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message arg0) {
TextMessage message = (TextMessage) arg0;
try {
Thread.sleep(3000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
System.out.println("A接收消息:"+message.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
消費者在消費的時候,是同步的,需要等onMessage處理完成之後,才能繼續處理下一個消息。
消費者消費失敗處理
activeMQ可以使用消費端主動確認消費結果的設定,如果啓用該模式,那麼每條消息消費結果將由消費者上報給消息服務器。