本文通过简单的示例代码和说明,让读者能够了解微服务如何集成RabbitMq
之前的教程https://www.cnblogs.com/leafstar/p/17641358.html
在这里我将介绍Centos中通过docker进行安装RabbitMq
1.首先你已经有一台可以使用的虚拟机(教程很多)
2.yum install docker -y
3.拉取docker镜像
docker pull rabbitmqdocker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:latest
4.开启web管理界面
docker exec -it 15a67332f595 bash
通过rabbitmq-plugins list命令可列出插件的启用和禁用状态
rabbitmq-plugins list
开启RabbitMQ的web界面即可管理RabbitMQ服务
rabbitmq-plugins enable rabbitmq_management
打开浏览器并访问:http://服务器ip:15672/,并使用默认用户guest登录,密码也为guest。我们可以看到如下图的管理页面:
5.ok,接下来我们用已有的微服务项目集成RabbitMq
6.分别在bank1和bank2的pom文件下添加依赖
org.springframework.boot spring-boot-starter-amqp
7.在两个服务配置文件中添加
rabbitmq: host: 192.168.74.134 port: 5672 username: guest password: guest publisher-confirms: false # 消息发送到交换机确认机制,是否确认回调 publisher-returns: true devtools: restart: enabled: false
注意添加位置
8.在bank1包下添加Mq配置如下
@Configurationpublic class RabbitMQConfig { public static final String EXCHANGE_NAME="boot_topic_exchange"; public static final String QUEUE_NAME="boot_queue"; //交换机 @Bean("bootExchange") public Exchange bootExchange(){ return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); } //队列 @Bean("bootQueue") public Queue bootQueue(){ return QueueBuilder.durable(QUEUE_NAME).build(); } //将交换机和队列进行绑定 @Bean public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange){ return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs(); }}
9.在controller里面调用,添加下面自动装配
@Autowired
private RabbitTemplate rabbitTemplate;
添加接口
@GetMapping("/writeMQ")public String writeMQ() { rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "boot.as", "Hello,MQ"); return "添加成功";}
重启项目并调用,后端没有打印任何异常
10.进入MQ的webui界面,消息已经成功添加
11.bank2中添加监听者并启动bank2
12.可以看到,bank2第一时间拿到了消息
此时消息被消费
13.MQ的使用场景相当广,这里只是简单演示一下,具体业务和场景还需要大家考量。