RabbitMQ安装以及SpringBoot整合RabbitMQ
RabbitMQ安装以及SpringBoot整合
1、Docker安装RabbitMQ
#拉取rabbitmq镜像
docker pull rabbitmq
#启动RabbitMQ
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
#安装图形化插件
#进入容器
docker exec -it 容器id /bin/bash
#安装插件
rabbitmq-plugins enable rabbitmq_management
注意:
你在操作图形化界面时,可能会出现该问题:Management API returned status code 500,如下图:
解决方案:
#进入rabbitmq容器,修改配置文件
docker exec -it 容器id /bin/bash
cd /etc/rabbitmq/conf.d/
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
exit
运行成功后可以访问:localhost:15672 初始化账号和密码为:guest
远端服务器如果访问不到,注意是否忘记安全组设置开放端口
2、SpringBoot集成RabbitMQ
2.1 引入依赖
父类pom文件
<parent>
<artifactId>spring-boot-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.6.0</version>
</parent>
<!--依赖-->
<dependencies>
<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>
</dependencies>
2.2 创建生产者项目producer
application.yml
server:
port: 8081
spring:
rabbitmq:
host: localhost
port: 5672
virtual-host: /
username: guest
password: guest
RabbitMQConfig
@Configuration
public class RabbitMQConfig {
/**
* 创建交换机
* @return
*/
@Bean(name = "itemTopicExchange")
public Exchange createTopicExchange(){
return ExchangeBuilder.topicExchange("item_topic_exchange").build();
}
/**
* 创建消息队列
* @return
*/
@Bean(name = "itemQueue")
public Queue createItemQueue(){
return QueueBuilder.durable("item_queue").build();
}
/**
* 队列绑定交换机
* @param queue
* @param exchange
* @return
*/
@Bean
public Binding bindingQueueToExchange(@Qualifier("itemQueue") Queue queue,
@Qualifier("itemTopicExchange") Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with("item.#").noargs();
}
}
TopicController
@RestController
@RequestMapping("/topic")
public class TopicController {
//用于发送MQ消息
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/send")
public String sendMessageToTopicQueue(){
rabbitTemplate.convertAndSend("item_topic_exchange", "item.insert", "商品新增,routing key 为item.insert");
rabbitTemplate.convertAndSend("item_topic_exchange", "item.update", "商品修改,routing key 为item.update");
rabbitTemplate.convertAndSend("item_topic_exchange", "item.delete", "商品删除,routing key 为item.delete");
return "生产者发送消息到消息队列";
}
}
2.3 创建消费者工程
application.yml
server:
port: 8082
spring:
rabbitmq:
host: localhost
port: 5672
virtual-host: /
username: guest
password: guest
消息监听MessageListener
@Component
public class MessageListener {
/**
* 监听某个队列的消息
* @param message 接收到的消息
*/
@RabbitListener(queues = "item_queue")
public void myListener(String message){
System.out.println("消费者接收到的消息" + message);
}
}
启动生产者,并发送消息:
发送请求:http://localhost:8081/topic/send
消费者监听到消息后消费消息:
Gitee项目地址:rabbitmq-topic模式demo
作者:CODING一场空
来源链接:https://blog.csdn.net/NeverFG/article/details/122868185
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。