rabbitMQ是一款开源的高性能消息中间件,最近项目处于技术组件搭建阶段,于是决定使用docker搭建,快速方便!
还有一种搭建方式是基于Centos 的搭建,相对复杂,后期会更新
获取rabbit mq镜像
- 查询镜像版本
docker search rabbitMq

- 安装程序镜像
docker pull docker.io/rabbitmq:3.7.7-management
如果需要web端管理插件的,则需要指定镜像tag为3.7.7-management,表示下载包含web管理插件版本镜像。
https://hub.docker.com/_/rabbitmq 各个镜像版本对应关系
*运行镜像
docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/usr/local/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=adore_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin123 095cd34350b9

关于其中的参数含义如下:
- --name指定了容器名称
- -d 指定容器以后台守护进程方式运行
- -p指定容器内部端口号与宿主机之间的映射,rabbitMq默认要使用15672为其web端界面访问时端口,5672为数据通信端口
- 管理员账号:admin/admin123
- 查看启动情况
docker logs a93debc9a878

会默认新建一个账号名称:guest 密码:guest的账号。
访问是否安装成功
web端查看

如图:则现在就已经在docker中安装成功Rabbit MQ
Spring boot实现消息发送和接收
- pom文件引用
<!--rabbit mq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
(1)RabbitMq spring配置
#rabbitMq
spring.rabbitmq.host=10.0.252.208
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin123
#virtual-host环境配置(此作用是为了进行环境隔离,需先新增)
spring.rabbitmq.virtual-host=uhi_vhost_test
#设并发消费数
spring.rabbitmq.listener.simple.concurrency=2
spring.rabbitmq.listener.simple.max-concurrency=4
(2)RabbitMq Config文件编写
/**
* @author: create by adoreft
* @version: v1.0
* @keyWord: Time is not waiting for me, you forgot to take me away.
* @description: RabbitMqUhiConfig
* @Date: 4/16/21 10:26 AM
**/
@Configuration
public class RabbitMqUhiConfig {
public static final String UHI_LOGS_QUEUE = "uhi_logs_queue";
public static final String QUEUE_INFORM_SMS = "queue_inform_sms";
public static final String EXCHANGE_TOPICS_INFORM = "exchange_topics_inform";
public static final String ROUTINGKEY_EMAIL = "uhi.log";
/**
* 声明TOPICS工作模式的交换机
*/
@Bean(EXCHANGE_TOPICS_INFORM)
public Exchange EXCHANGE_TOPICS_INFORM() {
// durable(true) 表面重启之后交换机还在
return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
}
/**
* 声明UHI_LOGS_QUEUE队列
*/
@Bean(UHI_LOGS_QUEUE)
public Queue QUEUE_INFORM_EMAIL() {
return new Queue(UHI_LOGS_QUEUE);
}
/**
* 声明QUEUE_INFORM_SMS队列
*/
@Bean(QUEUE_INFORM_SMS)
public Queue QUEUE_INFORM_SMS() {
return new Queue(QUEUE_INFORM_SMS);
}
/**
* 交换机与UHI_LOGS_QUEUE队列绑定
*/
@Bean
public Binding BINDING_QUEUE_INFORM_EMAIL(@Qualifier(UHI_LOGS_QUEUE) Queue queue,
@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();
}
}
(3)RabbitMq 提供方文件编写
/**
* @author: create by adoreft
* @version: v1.0
* @keyWord: Time is not waiting for me, you forgot to take me away.
* @description: RabbitMqUhiProducer
* @Date: 4/16/21 10:35 AM
**/
@Component
@Service
public class RabbitMqUhiProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendUhiLogMessage(String message) {
rabbitTemplate.convertAndSend(RabbitMqUhiConfig.EXCHANGE_TOPICS_INFORM,
RabbitMqUhiConfig.ROUTINGKEY_EMAIL, message);
}
}
(3)RabbitMq 消费方文件编写
/**
* @author: create by adoreft
* @version: v1.0
* @keyWord: Time is not waiting for me, you forgot to take me away.
* @description: RabbitMqUhiConsumer
* @Date: 4/16/21 10:36 AM
**/
@Component
@Service
public class RabbitMqUhiConsumer {
/**
* 监听队列
*/
@RabbitListener(queues = {RabbitMqUhiConfig.UHI_LOGS_QUEUE})
public void receiveUhiLogs(String msg, Message message, Channel channel) {
System.out.println(msg);
}
}

如上我们就完成了在spring boot中集成rabbit mq;
网友评论