RabbitMQ概述
RabbitMQ是一款采用Erlang编程语言构建的开源消息代理软件,其官方网站为:RabbitMQ官方平台。本文将深入解析其核心架构原理与基础应用方法。
环境部署
部署过程中需要关注两个关键端口配置:
* 15672:管理控制台的访问入口
* 5672:消息传输处理接口
完成安装后,通过http://127.0.0.1:15672即可访问管理界面。首次登录需使用预设的管理员凭证。成功登录后将显示系统概览面板:
RabbitMQ的系统架构示意图如下:
主要包含以下核心组件:
* 消息发布者
:负责产生并发送消息的应用程序
* 消息订阅者
:接收并处理消息的服务端
* 消息队列
:临时存储待处理消息的缓冲区
* 路由交换器
:决定消息分发路径的核心组件
* 虚拟空间
:实现多租户隔离的逻辑分区
这些组件均可通过管理控制台进行配置,后续章节将详细介绍控制台操作。
消息传输机制
交换器详解
在Exchanges管理界面中,系统预置了多种交换器类型:
通过控制台的publish message功能可以模拟消息发送:
实验证明交换器不具备消息持久化能力。
队列创建
在Queues界面新建消息队列:
命名为hello.queue1
:
继续创建第二个队列hello.queue2
,最终结果:
此时向amq.fanout
发送消息仍无法到达队列,说明需要建立绑定关系。
建立绑定
在Exchange详情页的Bindings菜单中配置队列绑定:
完成两个队列的绑定后:
消息验证
再次发送测试消息:
在队列中查看接收到的消息:
通过get message功能查看消息详情:
此时若有消费者监听对应队列即可处理消息。
多租户隔离
用户权限
Admin界面展示用户管理功能:
关键字段说明:
* 用户名
:系统标识
* 权限标签
:定义用户角色
* 可访问空间
:指定资源范围
虚拟主机
退出当前登录:
创建专属虚拟主机:
创建完成后:
切换虚拟主机后,队列列表发生变化:
SpringAMQP集成开发
基础配置
添加Maven依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
快速示例
消息生产者
配置连接参数:
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
virtual-host: /hmall
username: hmall
password: 123
发送消息示例:
@SpringBootTest
public class MessageSenderTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void sendSimpleMessage() {
rabbitTemplate.convertAndSend("simple.queue", "测试消息");
}
}
消息消费者
监听处理消息:
@Component
public class MessageReceiver {
@RabbitListener(queues = "simple.queue")
public void processMessage(String content) {
System.out.println("收到消息:" + content);
}
}
工作队列模式
创建work.queue队列:
批量发送测试:
@Test
public void testWorkQueue() {
for(int i=0; i<50; i++){
rabbitTemplate.convertAndSend("work.queue", "消息"+i);
}
}
消息路由模式
广播模式
配置示例:
@Configuration
public class BroadcastConfig {
@Bean
public FanoutExchange fanoutExchange(){
return new FanoutExchange("broadcast.exchange");
}
}
定向路由
注解式声明:
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "route.queue1"),
exchange = @Exchange(name = "direct.exchange", type = ExchangeTypes.DIRECT),
key = {"red","blue"}
))
public void receiveDirectMessage(String msg){
System.out.println("定向消息:"+msg);
}
主题匹配
通配符示例:
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "topic.queue"),
exchange = @Exchange(name = "topic.exchange", type = ExchangeTypes.TOPIC),
key = "china.#"
))
public void receiveTopicMessage(String msg){
System.out.println("主题消息:"+msg);
}
消息序列化
配置JSON转换器:
@Bean
public MessageConverter jsonMessageConverter(){
return new Jackson2JsonMessageConverter();
}
常用扩展组件
RabbitMQ支持多种功能扩展插件:
* 运维监控插件:提供Web管理界面
* 跨节点同步插件:实现集群间消息复制
* 协议支持插件:扩展STOMP等协议支持
* 监控指标插件:集成Prometheus监控
* 延迟队列插件:支持定时消息投递
[注:原文所有图片链接均保留,二维码已移除]
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/8747.html