仓库地址:ReturnTmp/rabbitmq-demo: rabbitmq 实例代码 (github.com)
生产者
配置
创建子模块 rabbitmq-provider
依赖配置(也可以 IDEA 初始化模块直接勾选)
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
application.yml
server:
port: 8021
spring:
application:
name: rabbitmq-provider
rabbitmq:
host: 127.0.0.1
port: 5672
username: root
password: 111111
virtual-host: RootHost
其中虚拟 host 配置项不是必须的,需要自行创建 vhost,如果未自行创建,默认为 virtual-host: /
注:vhost 可以理解为虚拟 broker,即 mini-RabbitMQ server,其内部均含有独立的 queue、bind、exchange 等,最重要的是拥有独立的权限系统,可以做到 vhost 范围内的用户控制。当然,从 RabbitMQ 全局角度,vhost 可以作为不同权限隔离的手段
可以按照如下步骤创建 vhost
然后创建用户(管理员)
然后我们需要为用户分配权限,指定使用我们刚刚创建的 vhost
代码
创建直连交换机配置类
注:RabbitMQ 共有四种交换机,分别为:直连交换机,扇形交换机,主题交换机,首部交换机。这里使用直连交换机演示,其他读者可以自行尝试
@Configuration
public class DirectRabbitConfig {
//队列 起名:TestDirectQueue
@Bean
public Queue TestDirectQueue() {
// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
// return new Queue("TestDirectQueue",true,true,false);
//一般设置一下队列的持久化就好,其余两个就是默认false
return new Queue("TestDirectQueue", true);
}
//Direct交换机 起名:TestDirectExchange
@Bean
DirectExchange TestDirectExchange() {
// return new DirectExchange("TestDirectExchange",true,true);
return new DirectExchange("TestDirectExchange", true, false);
}
//绑定 将队列和交换机绑定, 并设置用于匹配键:TestDirectRouting
@Bean
Binding bindingDirect() {
return BindingBuilder.bind(TestDirectQueue()).to(TestDirectExchange()).with("TestDirectRouting");
}
@Bean
DirectExchange lonelyDirectExchange() {
return new DirectExchange("lonelyDirectExchange");
}
}
然后写简单的接口进行消息推送(可以视情况写为定时任务)
@RestController
public class SendMessageController {
@Autowired
RabbitTemplate rabbitTemplate; //使用RabbitTemplate,这提供了接收/发送等等方法
@GetMapping("/sendDirectMessage")
public String sendDirectMessage() {
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "test message, hello!";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String, Object> map = new HashMap<>();
map.put("messageId", messageId);
map.put("messageData", messageData);
map.put("createTime", createTime);
//将消息携带绑定键值:TestDirectRouting 发送到交换机TestDirectExchange
rabbitTemplate.convertAndSend("TestDirectExchange", "TestDirectRouting", map);
return "ok";
}
}
启动项目,调用接口: http://localhost:8021/sendDirectMessage
查看 RabbitMQ 管理页面查看是否推送成功
消费者
配置
创建子模块 rabbitmq-consumer
依赖配置
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
application.yml
server:
port: 8022
spring:
application:
name: rabbitmq-consumer
rabbitmq:
host: 127.0.0.1
port: 5672
username: root
password: 111111
virtual-host: RootHost
代码
创建消息接收监听类
@Component
@RabbitListener(queues = "TestDirectQueue")
public class DirectReceiver {
@RabbitHandler
public void process(Map testMessage) {
System.out.println("DirectReceiver receive message: " + testMessage.toString());
}
}
之后启动项目,查看消费者接收情况
序列化
发送接收消息可能出现 Failed to convert message
问题,可以通过使用 JSON 序列化传输信息方式解决
生产者
@Configuration
public class RabbitMQConfig implements InitializingBean {
/\*\*
\* 自动注入RabbitTemplate模板
\*/
@Resource
private RabbitTemplate rabbitTemplate;
/\*\*
\* 发送消息JSON序列化
\*/
@Override
public void afterPropertiesSet() {
//使用JSON序列化
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
}
}
消费者
@Configuration
public class RabbitMQConfig {
@Bean
public MessageConverter jsonMessageConverter(ObjectMapper objectMapper) {
return new Jackson2JsonMessageConverter(objectMapper);
}
}
彻底卸载
我们安装中可能出现各种问题,一般情况下是 RabbitMQ 和 Erlang 版本不对应,需要完全卸载 RabbitMQ 和 Erlang,可以按照如下步骤卸载
注:博主首次安装使用的是 Erlang 20.3 Rabbit 3.7.15 ,之后似乎小版本不对应,出现问题,需要重新卸载安装
(1)打开 Windows 控制面板,双击“程序和功能”。
(2)在当前安装的程序列表中,右键单击 RabbitMQ Server,然后单击“卸载”。
(3)在当前安装的程序列表中,右键单击“Erlang OTP”,然后单击“卸载”。
(4)打开 Windows 任务管理器。
(5)在任务管理器中,查找进程 epmd.exe。 如果此进程仍在运行,请右键单击该进程,然后单击“结束进程”。
(6)删除 RabbitMQ 和 Erlang 的所有安装目录。
(7)删除文件 C:\Windows\System32\config\systemprofile.erlang.cookie
(如果存在)。
(8)转到用户文件夹:C:\Users\[username]
,然后删除文件.erlang.cookie。
(9)同样在 User 文件夹中,转到 AppData \ Roaming \ RabbitMQ
。删除 RabbitMQ 文件夹。
(10)删除注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Ericsson\Erlang\ErlSrv
的子项。
(11)打开运行 cmd->sc delete RabbitMQ。
(12)打开运行->regedit 找到 RabbitMQ 节点,删掉即可(如果存在)
参考链接
- Windows 下安装 RabbitMQ 服务器及基本配置 - 蓝之风 - 博客园 (cnblogs.com)
- RabbitMQ Windows 安装、配置、使用 - 小白教程-阿里云开发者社区 (aliyun.com)
- Windows 如何完全卸载 RabbitMQ 和 Erlang 删除注册表
- windows 下 Erlang 与 RabbitMQ 重新安装时,由于卸载不干净导致各类错误
- 超详细的 RabbitMQ 入门,看这篇就够了!-阿里云开发者社区 (aliyun.com)
- RabbitMQ 整合 Spring Boot,实现 Hello World
- Springboot 整合 RabbitMq ,用心看完这一篇就够了
- RabbitMq 核心知识点小结 - 知乎 (zhihu.com)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
知乎 (zhihu.com)]( )
[外链图片转存中…(img-xDZU1Xbn-1714428850900)]
[外链图片转存中…(img-CR7IyKu6-1714428850901)]
[外链图片转存中…(img-IlylaYXO-1714428850901)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新