游覽器輸入地址: http://127.0.0.1:8161/admin/ 訪問activemq管理臺
賬號和密碼默認為: admin/admin# yml配置的密碼也是如下的密碼
activemq:url: failover:(tcp://localhost:61616)username: adminpassword: admin@Component
public class ActiveMqReceiveRouter extends RouteBuilder {@Overridepublic void configure() throws Exception {// Queue模式隊列 (點對點模式)?監聽Queues名稱為queueName的消息, 只能一個消費from("activemq:queueName").log("${body}").end();// topic模式隊列(發布訂閱模式)? 多個監聽者監聽同一個名為"sino.top"的Topic主題, 都可以收到消息并消費. 默認情況下,ActiveMQ 中的主題是廣播模式from("activemq:topic:sino.top").log("監聽1收到的消息: ${body}");from("activemq:topic:sino.top").log("監聽2收到的消息: ${body}");}
}
1.Queue模式隊列 (點對點模式)?
創建queue來發送消息? queue的名稱可以是 xxx.xxxx.xxxx
Name : 消息隊列名稱
Number Of Pending Messages:未被消費的消息數目
Number Of Consumers:消費者數量
Messages Enqueued :進入隊列的消息,進入隊列的消息總消息數目,包括已被消費和未被消費的消息數目.這個 數目只增不減.
Messages Dequeued :出了隊列的消息,可以理解為是被消費的消息數量,在queues里和它進入隊列的總數量相等(因為一個消息之后被成功消費一次.)如果暫時不等,是因為消費者還沒來得及消費.
2.topic模式隊列(發布訂閱模式)?
創建topic來發送消息??默認情況下,ActiveMQ 中的主題是廣播模式, 多個監聽都能監聽同一個topic并消費
Name : 主題名稱
Number Of Pending Messages:未被消費的消息數目
Number Of Consumers:消費者數量
Messages Enqueued : 進入隊列的消息,進入隊列的消息總數目,包括已被消費和未被消費的,這個數目只增不減.
Messages Dequeued :出了隊列的消息,可以理解為是被消費的掉的消息數量,在topics里,因為多消費者從而導致數量會比入隊數目要高
3. topic模式隊列 和 Queue模式隊列? 用那種好?
Queue(點對點模式):
一對一通信:每個消息只被一個消費者接收。
持久性:如果消費者離線,消息可以存儲在隊列中直到消費者上線并處理它們。
負載均衡:可以實現消費者之間的負載均衡,消息在消費者之間分配。
適用場景:適用于任務分發、確保消息不丟失且每個消息都需要被處理一次的場景。
Topic(發布/訂閱模式):
一對多通信:消息可以被一個或多個訂閱了該主題的消費者接收。
廣播:適合消息廣播,所有在線的訂閱者都會收到消息。
時效性:消費者只能接收到訂閱之后發布的消息,錯過的時間點的消息無法獲取。
適用場景:適用于新聞推送、實時更新、系統通知等需要廣播信息給多個接收者的場景。
決策依據:
如果您的應用需要保證每條消息都被至少處理一次,并且可以容忍短暫的延遲(例如消費者不在線時),那么Queue可能更合適。
如果您的應用需要實時廣播信息給多個接收者,每個接收者都可以處理或忽略這些信息,且不需要持久化所有消息給未在線的接收者,那么Topic可能更適合。
總之,根據您的業務邏輯是否需要消息持久化、消息的廣播特性以及對消息處理的精確控制要求來決定使用Queue還是Topic。