美文网首页Docker+
MQ Springboot整合RabbitMQ

MQ Springboot整合RabbitMQ

作者: 小P聊技术 | 来源:发表于2021-04-26 08:23 被阅读0次

    1 资源

    资源信息 版本号 备注
    rabbitMQ 3.6.5 IP: 192.168.51.4
    springboot 2.1.5.RELEASE

    springboot-rabbitmq-demo 源码 下载

    2 rabbitmq安装

    需要安装rabbitmq,如果未安装,可参考博文:

    MQ RabbitMQ 单机版部署和配置

    3 springboot整合

    3.1 pom文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.5.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>com.auskat.demo.rabbitmq</groupId>
        <artifactId>springboot-rabbitmq-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <!--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>
        </dependencies>
    
    </project>
    

    3.2 配置信息

    3.2.1 application.yml

    server:
      port: 8021
    spring:
      #给项目来个名字
      application:
        name: rabbitmq-demo
      #配置rabbitMq 服务器
      rabbitmq:
        host: 192.168.51.4
        port: 5672
    #    username: root
    #    password: root
        #虚拟host 可以不设置,使用server默认host
    #    virtual-host: JCcccHost
    

    3.2.2 配置类

    package com.auskat.demo.rabbitmq.config;
    
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.DirectExchange;
    import org.springframework.amqp.core.Queue;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 类文件: DirectRabbitConfig
     * <p>
     * <p>
     * 类描述:直连型交换机
     * <p>
     * 作     者: AusKa_T
     * <p>
     * 日     期: 2021/4/17 0017
     * <p>
     * 时     间: 19:32
     * <p>
     */
    @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");
        }
    
    }
    

    3.3 功能实现

    3.3.1 生产者

    package com.auskat.demo.rabbitmq.consumer.controller;
    
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    
    /**
     * 类文件: SendMessageController
     * <p>
     * <p>
     * 类描述:
     * <p>
     * 作     者: AusKa_T
     * <p>
     * 日     期: 2021/4/17 0017
     * <p>
     * 时     间: 19:35
     * <p>
     */
    @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";
        }
    
    }
    

    3.3.2 消费者

    package com.auskat.demo.rabbitmq.producer.receiver;
    
    import org.springframework.amqp.rabbit.annotation.RabbitHandler;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    import java.util.Map;
    
    /**
     * 类文件: DirectReceiver
     * <p>
     * <p>
     * 类描述:
     * <p>
     * 作     者: AusKa_T
     * <p>
     * 日     期: 2021/4/17 0017
     * <p>
     * 时     间: 19:37
     * <p>
     */
    @Component
    @RabbitListener(queues = "TestDirectQueue") //监听的队列名称 TestDirectQueue
    public class DirectReceiver {
    
        @RabbitHandler
        public void process(Map message) {
            System.out.println("DirectReceiver消费者收到消息  : " + message.toString());
        }
    }
    

    4 相关信息

    • 博文不易,辛苦各位猿友点个关注和赞,感谢

    相关文章

      网友评论

        本文标题:MQ Springboot整合RabbitMQ

        本文链接:https://www.haomeiwen.com/subject/hmesrltx.html