duchaochen / springboot-rabbitmq

rabbitmq消息队列示例

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rabbitmq配置

  在application.properties全局配置文件中配置以下代码:
    spring.rabbitmq.host=192.168.25.144
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    spring.rabbitmq.port=5672
   
  1.手动在后台添加交换器和消息队列,可以查看word文档
    链接:
    
  2.自定义message发送代码
      发送代码
            byte[] str = "你好吗,我是代码".getBytes();
            Message message = new Message(str,new MessageProperties());
            rabbitTemplate.send("exchange.kindstar.listest","queues",message);
            
      接收代码
        Message receive = rabbitTemplate.receive("queues.lis.kc");
        if (receive != null) {
            byte[] body = receive.getBody();
            System.out.println(new String(body));
        }
        
  3.对象形式发送与接收
        1)由于内置的默认序列化不是使用Jackson2JsonMessageConverter,所以现在需要自己配置一个使用Jackson2JsonMessageConverter的配置对象
            代码如下:
                @Configuration
                public class MyRabbitmqConfig {
                
                    @Bean
                    public MessageConverter messageConverter() {
                        return new Jackson2JsonMessageConverter();
                    }
                }
         这样就会在后台web端查看时是json格式的数据了,而不是被序列化过的乱码
         
        测试发送代码:
            Map map = new HashMap(10);
    		map.put("1","张三111");
    		map.put("2","李四111");
    		map.put("3","王五111");
    		rabbitTemplate.convertAndSend("exchange.kindstar.listest","queues.lis",map);
    		
        测试接收代码:
            Object o = rabbitTemplate.receiveAndConvert("queues.lis.kc");
            System.out.println(o);
            
  4.时时监听接收消息队列
        1)需要开启消息队列监听,只需要在启动类添加一个@EnableRabbit注解
        2)编写一个监听的service类代码
            @Service
            public class BookService {
            
                @Autowired
                private RabbitTemplate rabbitTemplate;
            
                @RabbitListener(queues = "queues.lis.zl")
                public void receive_zl(Map<String,Object> map) {
                    System.out.println("======================zl============================");
                    System.out.println(map);
                }
            
                @RabbitListener(queues = "queues.lis.cw")
                public void receive_cw(Map<String,Object> map) {
                    System.out.println("======================cw============================");
                    System.out.println(map);
                }
            
                @RabbitListener(queues = "queues.lis.ks")
                public void receive_ks(Message message) {
                    System.out.println("======================cw============================");
                    System.out.println(message);
                }
            }
            
         解释一下:@RabbitListener(queues = "queues.lis.zl")表示监听消息队列名称为《queues.lis.zl》信息
          public void receive_zl(Map<String,Object> map)表示接收对方发送的信息,直接转换成map类型
          
          
          public void receive_ks(Message message)表示接收message类型,里面包含信息头和未还有数据,数据为byte类型.
          也就是说这个是可以接收所有类型的信息
        
  5.代码创建消息队列,交换器,消息队列,以及绑定
    代码如下:
        //创建交换器
        amqpAdmin.declareExchange(new TopicExchange("exchange.kindstar.lis"));

        //创建消息队列
        amqpAdmin.declareQueue(new Queue("kindstar.lis.cw",true));

        /**
         * binding:
         * 		destination:目的地
         * 		destinationType:绑定的是一个消息队列
         */
        //消息队列目的地名称
        String destination ="kindstar.lis.cw";
        //使用消息队列
        Binding.DestinationType destinationType = Binding.DestinationType.QUEUE;
        //指定那个交换器
        String exchange = "exchange.kindstar.lis";
        //
        String routingKey = "kindstar.lis.#";
        amqpAdmin.declareBinding(new Binding(destination,destinationType,exchange,routingKey,null));

About

rabbitmq消息队列示例


Languages

Language:Java 100.0%