SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)

文章目录

    • 1、docker安装rabbitmq,指定版本包含了web控制页面
    • 2、运行rabbitMq容器
    • 3、测试连接:
    • 4、添加新的交换器:
    • 5、添加新的队列:
    • 6、添加新的绑定规则:
    • 7、测试消息发送:
    • 项目部署
    • 1、新建工程:勾选RabbitMQ
    • 2、添加book实体类:
    • 3、添加自定义消息转换类AMQPConfig:
    • 4、在service层中添加服务方法:
    • 5、在测试类中添加测试方法:(这里可以添加Junit4依赖进行测试,我这里IDEA直接自动添加了)
    • 总结

   项目前准备:(要求要安装了Docker喔!代码在文章末尾)

1、docker安装rabbitmq,指定版本包含了web控制页面

docker pull rabbitmq:management

2、运行rabbitMq容器

  15672是管理Robbit的Web页面的端口,5672是rabbitMq服务器的常用端口

#方式一:默认guest 用户,密码也是 guest
docker run -d --hostname myrabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management

#方式二:设置用户名和密码
docker run -d --hostname my-rabbit --name rabbit -e 
    RABBITMQ_DEFAULT_USER=user -e 
        RABBITMQ_DEFAULT_PASS=password -p 
        15672:15672 -p 5672:5672 rabbitmq:management

3、测试连接:

http://你的ID:15672/

出现下面页面就是成功了

SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第1张图片

4、添加新的交换器:

SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第2张图片

  direct交换器:路由键和Binding中的binding一样,交换器就讲消息发送到对应的队列中,只会发送一模一样的routingkey的队列信息,例如“dog”,就不会再发送“bigdog”
  Fanout Exchage :都发送,不需要路由键
  Topic Exchange:匹配发送,routing key有“dog”的队列消息都会发送


5、添加新的队列:

SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第3张图片
Auto:是否自动删除队列


6、添加新的绑定规则:


  重新回到Exchange面板,选择刚刚新建的交换器
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第4张图片

   添加绑定:
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第5张图片

  绑定成功:如果需要解绑就需要点击Unbind
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第6张图片


7、测试消息发送:

点击publish message,添加信息后点击发送
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第7张图片


发送后来到queues界面,发现队列消息准备就绪次数发生改变,测试成功。
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第8张图片
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第9张图片


项目部署

1、新建工程:勾选RabbitMQ

SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第10张图片

2、添加book实体类:

/**
 * Book测试类
 */
public class Book {
    private String bookName;
    private String author;

    public Book() {
    }

    public Book(String bookName, String author) {
        this.bookName = bookName;
        this.author = author;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bookName='" + bookName + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}


3、添加自定义消息转换类AMQPConfig:

@Configuration  //说明这是一个配置类,类中有我们自定以的配置类方法
public class AMQPConfig {
        @Bean //自动注入消息转换器 converter:转换器
        //进入MessageConverter接口后,按ctrl+H看实现类
        public MessageConverter getMessageConverter(){
            return new Jackson2JsonMessageConverter();
        }
}

4、在service层中添加服务方法:

@Service
public class Bookservice {

    //监听消息
    @RabbitListener(queues = "firstQueue")
    public void getReceive02(Message message){
        System.out.println("信息接收主要内容:"+message.getBody());
        System.out.println("信息接收主要属性:"+message.getMessageProperties());

    }
}

主要结构如下:
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第11张图片


5、在测试类中添加测试方法:(这里可以添加Junit4依赖进行测试,我这里IDEA直接自动添加了)

  首先在application.properties文件添加rabbitMQ的配置信息:

#rabbitmq的相关配置信息
spring.rabbitmq.host=你的IP
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=5672

在主类中添加:

@EnableRabbit //开启基于注解的RabbitMq模式

测试方法一:发送数据

    @Test //单播
    void test01(){
        Map<String,Object> map = new HashMap<>();
        map.put("msg","这是第一个书籍信息");
        //添加数据,字符型、整型、boolean类型
        map.put("data", Arrays.asList("helloVinda!",666,true));
        //对象被默认序列化以后发送出去
        rabbitTemplate.convertAndSend("firstExchange","first"
                ,new Book("十万个为什么","Vinda"));
    }

测试成功:被访问两次,web管理显示被管理两次,getMessage获得消息
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第12张图片


测试方法二:接收数据

    @Test //接收信息,接收后queue里面的值会被清空
    void test02(){
        //对应的队列名称要写正确
        Object obj = rabbitTemplate.receiveAndConvert("firstQueue");
        System.out.println(obj.getClass());
        System.out.println(obj);
    }

SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第13张图片

数据被清空:
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第14张图片


测试方法三:监听数据,成功
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第15张图片


测试方法四:使用AmqpAdmin去创建路由交换器,创建绑定规则
    //添加Amqp管理员,用于创建路由交换器,创建绑定规则
    @Autowired
    private AmqpAdmin amqpAdmin;

    /*创建交换机、队列信息和绑定规则*/
    @Test
    public void createExchange(){
        //declare:声明,声明新的路由器
        amqpAdmin.declareExchange(new DirectExchange("test.Exchange"));
        //declare:声明,声明新的队列消息
        amqpAdmin.declareQueue(new Queue("test.queue",true));
        //declare:声明,声明新的绑定规则
        /**
         String destination : 需要绑定的队列信息
         Binding.DestinationType destinationType : 绑定队列的类型
         String exchange    :需要绑定的交换器
         String routingKey  :发送的路由键
         *
         */
        amqpAdmin.declareBinding(new Binding("test.queue", Binding.DestinationType.QUEUE,
                "test.Exchange","test",null));
    }

测试结果:
SpringBoot系列:SpringBoot整合RabbitMQ(基于高级消息队列协议)_第16张图片


总结

  本人借助B站上的雷神解说的Springboot视频,完成了Springboot和RabbitMQ项目简单整合,全程手打为了自己能更好的记住相关知识点,理解这些知识是怎么整合的,如有理解不当欢迎留言,长路漫漫,继续加油把!

  雷神Springboot学习视频:Springboot+RabbitMQ
  我的代码地址:点我去我的Github

你可能感兴趣的:(rabbitmq,spring,队列,spring,boot)