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);
    }
}

 

posted @ 2020-10-03 23:17  xueheng_blog  阅读(1178)  评论(0编辑  收藏  举报