Spring boot集成RabbitMQ以及基于Docker的安装

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

获取rabbit mq镜像

  • 查询镜像版本
docker search rabbitMq
查询rabbitmq版本.png
  • 安装程序镜像
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
rabbitmq安装情况.png

关于其中的参数含义如下:

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

会默认新建一个账号名称:guest 密码:guest的账号。

访问是否安装成功

web端查看


安装成功.png

如图:则现在就已经在docker中安装成功Rabbit MQ

Spring boot实现消息发送和接收

  • pom文件引用

        
            org.springframework.boot
            spring-boot-starter-amqp
        

(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);
    }
}

rabbit.png

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

你可能感兴趣的:(Spring boot集成RabbitMQ以及基于Docker的安装)