游览器输入地址: http://127.0.0.1:8161/admin/ 访问activemq管理台
账号和密码默认为: admin/admin
# yml配置的密码也是如下的密码
activemq:
url: failover:(tcp://localhost:61616)
username: admin
password: admin
@Component
public class ActiveMqReceiveRouter extends RouteBuilder {
@Override
public 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。