zoukankan      html  css  js  c++  java
  • rabbitMQ系列5:springboot整合rabbitMQ+消息转换

    一、简介:

    有时候生产者需要发送给消息队列的是java对象,这时我们需要将java对象转换为JSON字符串,然后再消息队列再将JSON字符串发送给消费者,消费者通过解析JSON字符串并转换为原来的java对象。

     

    二、案例:

    1、引入依赖

    <!-- rabbitmq依赖 -->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    
    <!--fastJson-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.49</version>
    </dependency>
    
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    2、编写RabbitMQ配置属性:

    # rabbitMQ配置
    spring.rabbitmq.host=127.0.0.1
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    spring.rabbitmq.virtual-host=/
    spring.rabbitmq.listener.simple.concurrency= 10
    spring.rabbitmq.listener.simple.max-concurrency= 10
    spring.rabbitmq.listener.simple.prefetch= 1
    spring.rabbitmq.listener.simple.auto-startup=true
    spring.rabbitmq.listener.simple.default-requeue-rejected= true
    spring.rabbitmq.template.retry.enabled=true 
    spring.rabbitmq.template.retry.max-attempts=3
    spring.rabbitmq.template.retry.multiplier=1.0

    3、编写RabbitMQ配置类:

    import org.springframework.amqp.core.Queue;
    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;
    
    @Configuration
    public class MQConfig {
        // 队列名称
        public static final String QUEUE = "queue";
    
        /*
        在springboot启动的时候创建一个队列
         */
        @Bean
        public Queue queue() {
            return new Queue(QUEUE, true);
        }
    
        /*
        消息转换器:将消息转换为JSON格式
         */
        @Bean
        public MessageConverter getMessageConverter() {
            return new Jackson2JsonMessageConverter();
        }
    }

    4、编写消息类:该消息类是生产者发送给消息队列的参数

    @Data
    public class CustomMessage {
        private int id;
        private String name;
    }

    5、编写控制层:

    @Autowrite
    public MQSender mQSender;
    
    @RequestMapping("/test")
    public String test(){
        CustomMessage customMessage = new CustomMessage();
        customMessage.setId(1);
        customMessage.setName("miss");
        mQSender.send(customMessage);
        return "ok";
    }

    6、编写生产者:生产者将java对象转换为json字符串

    import com.alibaba.fastjson.JSON;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    @Slf4j
    public class MQSender {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        public void send(CustomMessage customMessage){
            String json = JSON.toJSONString(customMessage);
            log.info("send:"+json);
            rabbitTemplate.convertAndSend(MQConfig.QUEUE,json);
        }
    }

    7、编写消费者:消费者监听“QUEUE”队列是否有新数据,如果有则获取,并将json字符串转换为java对象

    import com.alibaba.fastjson.JSON;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Service;
    
    @Service
    @Slf4j
    public class MQReceiver {
    
        @RabbitListener(queues=MQConfig.QUEUE)  //监听
        public void  receive(String json){
            CustomMessage customMessage = JSON.toJavaObject(JSON.parseObject(json),                                             CustomMessage.class);
            system.out.println(customMessage);
        }
    }
  • 相关阅读:
    《网络攻防技术与实践》第六周学习总结
    《网络攻防技术与实践》第五周学习总结
    《网络攻防技术与实践》第四周学习总结
    《网络攻防技术与实践》第三周学习总结
    20159302《网络攻击与防范》第十一周学习总结
    20159302《网络攻击与防范》第十周学习总结
    20159302《网络攻击与防范》第九周学习总结
    20159302《网络攻击与防范》第八周学习总结
    20159302《网络攻击与防范》第七周学习总结-2
    20159302《网络攻击与防范》第七周学习总结
  • 原文地址:https://www.cnblogs.com/XueTing/p/13765923.html
Copyright © 2011-2022 走看看