zoukankan      html  css  js  c++  java
  • RabbitMQ代码操作之发消息和序列化机制

    几个自动配置类:

    1.RabbitAutoConfiguration
    2.有自动配置了连接工厂 ConnectionFactory
    3.RabbitProperties 封装了RabbitMQ的配置
    4.RabiitTemlate:给RabbitMQ发送和接收消息
    5.AmqpAdmin:RabbitMQ系统管理功能组件(可以创建exchange,queue,Binding)
    6.@EnableRabbit+@RabbitListener 监听消息队列的内容

    • 配置文件写法:
    spring.rabbitmq.host=192.168.0.113
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    #端口5672默认可以不写
    #spring.rabbitmq.virtual-host=  默认/可以不写
    • 测试类:
    @SpringBootTest
    public class Springboot002AmqpApplicationTests {
    
    
        @Autowired
        RabbitTemplate  rabbitTemplate;
    
        /*
        1.单播(点对点)
          public Message(byte[] body, MessageProperties messageProperties) {
            this.body = body;
            this.messageProperties = messageProperties;
        }
        * */
        @Test
        public void contextLoads() {
            //交换器,路邮件,消息
            //Message需要自己构造一个,定一消息体内容和消息头
            //rabbitTemplate.send(exchange,routekey,message);
    
            //转法并发送,Object默认当成消息体,只需要传入要发送的对象,自动序列化保存发送给rabbitmq
            //rabbitTemplate.convertAndSend(exchange,routKey,object);
            Map <String ,Object>map = new HashMap<>();
            map.put("msg","这是第一个消息");
            map.put("data", Arrays.asList("helloWorld","123",true));
            //对象被默认序列化后发送出去
            //rabbitTemplate.convertAndSend("exchange.direct","springbootTest.news",map);
            //json发送MyAMQPConfig类配置
            rabbitTemplate.convertAndSend("exchange.direct","springbootTest.news",new Book("西游记","吴承恩"));
        }
    
        //接收
        @Test
        public  void  receive(){
            Object o = rabbitTemplate.receiveAndConvert("springbootTest.news");
            //打印数据类型
            System.out.println(o.getClass());
            System.out.println(o);
        }
    /*
    * 1.单播
    * */
        @Test
        public void setOneMsg(){
            rabbitTemplate.convertAndSend("exchange.direct","springbootTest",new Book("水浒传","单播"));
    
    
    
        /*
        * 2.广播
        * */
        @Test
        public void setAllMsg(){
            rabbitTemplate.convertAndSend("exchange.fanout","",new Book("红楼梦","曹雪芹"));
    
        }
    发送消息时如不配置序列化方法则按照java默认序列化机制,则会造成发送编码不符合
    解决方法:
    json发送MyAMQPConfig类配置
    @Configuration
    public class MyAMQPConfig {
        @Bean
        public MessageConverter messageConverter(){
              return new Jackson2JsonMessageConverter();
        }
    }
  • 相关阅读:
    leetcode--Search for a Range
    leetcode--Valid Palindrome
    leetcode--Validate Binary Search Tree
    leetcode--Count and Say
    leetcode--Partition List
    C语言atof()函数:将字符串转换为double(双精度浮点数)
    程序员与科学家的区别
    mingw编译rtmp库
    使用printf输出各种格式的字符串( 转载)
    c++使用stdint.h和inttypes.h
  • 原文地址:https://www.cnblogs.com/MagicAsa/p/10826596.html
Copyright © 2011-2022 走看看