• rabbitmq的学习2


      代码中有注解可参考

      

     1.引入相关的maven依赖

         <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.amqp</groupId>
                <artifactId>spring-rabbit-test</artifactId>
                <scope>test</scope>
            </dependency>

    2. 配置文件

    # rabbitmq配置信息
    # ip
    spring.rabbitmq.host=192.168.14.200
    # 端口
    spring.rabbitmq.port=5672
    # 用户名
    spring.rabbitmq.username=guest
    # 密码
    spring.rabbitmq.password=guest

    3.启动类

    package com.lh.springboot;
    
    import org.springframework.amqp.rabbit.annotation.EnableRabbit;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /*
    
        1. 自动配置 RabbitAutoConfiguration 类
        2. 又自动配置了 连接工厂 ConnectionFactory
        3. RabbitProperties 封装了 Rabbitmq的所有配置
        4. RabbitTemplate 给Rabbitmq 发送和接收信息的
        5. AmqpAdmin 是rabbitmq 的系统管理功能组件
           AmqpAdmin  创建和删除 Queues、Exchanges、 Bindings
        6. @EnableRabbit + @RabbitListener 监听消息队列的内容
    
     */
    
    @SpringBootApplication
    @EnableRabbit   //开启基于注解的Rabbitmq模式
    public class Springbootweb03Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Springbootweb03Application.class, args);
        }
    
    }

    4.config.RabbitmqConfig 类

    package com.lh.springboot.config;
    
    import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
    import org.springframework.amqp.support.converter.MessageConverter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @program: springbootweb03
     * @description: rabbitmq的配置类
     * @author: li hui
     * @create: 2020-12-22 15:25
     */
    @Configuration
    public class RabbitmqConfig {
        @Bean
        public MessageConverter messageConverter(){
            //new Jackson2JsonMessageConverter() 将发送的信息已JSON发送
            return new Jackson2JsonMessageConverter();
        }
    }

    5.bean.Book类

    package com.lh.springboot.bean;
    
    /**
     * @program: springbootweb03
     * @description:
     * @author: li hui
     * @create: 2020-12-22 15:37
     */
    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;
        }
    }

    6.测试类

    package com.lh.springboot;

    import com.lh.springboot.bean.Book;
    import org.junit.jupiter.api.Test;
    import org.springframework.amqp.core.AmqpAdmin;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.DirectExchange;
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;

    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;

    @SpringBootTest
    class Springbootweb03ApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private AmqpAdmin amqpAdmin;

    //AmqpAdmin 是rabbitmq 的系统管理功能组件
    //AmqpAdmin 创建和删除 Queues、Exchanges、 Bindings
    @Test
    void createExchange(){
    //创建DirectExchange
    /* amqpAdmin.declareExchange(new DirectExchange("amqpAdmin.exchange"));
    System.out.println("创建完成");*/

    //创建队列
    //amqpAdmin.declareQueue(new Queue("amqpAdmin.queue",true));

    //创建绑定规则
    /*amqpAdmin.declareBinding(new Binding("amqpAdmin.queue", Binding.DestinationType.QUEUE,
    "amqpAdmin.exchange","amqpAdmin.haha",null));
    */

    //删除
    amqpAdmin.deleteQueue("huige.news");
    }

    /*
    1.点播 (点对点)

    */
    //发送信息
    @Test
    void contextLoads() {
    /**
    * @Author: li hui
    * @Param: []
    * @return: void
    * @date: 2020/12/22
    * @Description:
    *
    * 两个方法都可以做到发送消息
    * rabbitTemplate.send(exchange,routingKey,message);
    * rabbitTemplate.convertAndSend(exchange,routingKey,object);
    *
    * exchange: 交换器
    * routingKey: 路由件
    * message: 发送的消息 自己构造的一个;定义消息内容和消息头
    * object: 对象 默认当成消息体 只需要传入发送的对象 自动序列化发送给Rabbitmq
    */
    Map<String,Object> map = new HashMap<>();
    map.put("msg","第一个消息");
    map.put("data", Arrays.asList("hello world !!", 123, true));
    //对象被默认序列化以后发送出去
    rabbitTemplate.convertAndSend("exchange.direct","hui",map);


    }


    //接收消息,如何将数据自动的转为JSON发送出去
    @Test
    void receive(){
    Object hui = rabbitTemplate.receiveAndConvert("hui");
    System.out.println(hui);
    }


    /*
    1.广播

    */
    // 交换器 fanout 类型 发送信息
    @Test
    void senMsg(){
    rabbitTemplate.convertAndSend("exchange.fanout","",new Book("红楼梦","曹雪芹"));
    }

    }

    监听 消息对列

    BookServicer 类

    package com.lh.springboot.service;

    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Service;

    import java.util.Map;

    /**
    * @program: springbootweb03
    * @description:
    * @author: li hui
    * @create: 2020-12-22 15:47
    */
    @Service
    public class BookService {

    @RabbitListener(queues = {"hui","hui.news","hui.emps","lihui.news"}) // queues 监听消息队列 是一个数组的方式
    public void receive(Map map){
    System.out.println("收到的消息:"+ map.toString());
    }

    }

    启动主程序类 , 利用测试类 发送信息查看 主程序中是否有监听到

  • 相关阅读:
    libusb简介
    STM8S和STM8L调试串口中断的注意点
    QT 5.1.1 for Android 开发环境搭建与配置【Windows 7】
    【Luogu3806】点分治(点分治)
    NOIP2017+停课总结
    【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)
    【Luogu3455】【POI2007】ZAP-Queries(莫比乌斯反演)
    【HDU1695】GCD(莫比乌斯反演)
    【BZOJ2816】【ZJOI2012】网络(Link-Cut Tree)
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/lihui123/p/14184475.html
Copyright © 2020-2023  润新知