注解形式实现SpringBoot结合RabbitMq

导入相关依赖

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

在配置文件中配置rabbitMq的相关配置:(下图为yml)

spring:
  rabbitmq:
     host: 192.168.2.225
     port: 5672
     username: shuige
     password: SHUIge@123.

# 测试mq
mq.exchange.queue: zz.queue2
mq.exchange.exchange: zz.exchange2
mq.exchange.routekey: zz.haha2

配置对象序列化传输:

/**
 * Description: amqpConfig
 * User: zhouzhou
 * Date: 2018-08-27
 * Time: 17:36
 */
@Configuration
public class MyAmqpConfig {

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

定义下包装类,用于传输mq对象

/**
 * Description:Mq 专属model
 * User: zhouzhou
 * Date: 2018-09-21
 * Time: 18:52
 */
@Data
public class MqModel<T> {

    private String mqNo;
    /** 响应数据 */
    private T data;
    /** 响应状态 */
    private Boolean status = true;
    /** 响应消息 */
    private String msg;

}

接下来定义发送消息层,这里初始化了交换机, 路由键, 队列, 并且绑定

/**
 * Description: 专属发送消息MQ
 * User: zhouzhou
 * Date: 2018-09-21
 * Time: 18:19
 */
@Service
public class MqSendService {
    @Value("${mq.exchange.exchange}") String exchange ;

    @Value("${mq.exchange.queue}") String queue;

    @Value("${mq.exchange.routekey}") String route_key ;

    @Autowired
    private AmqpTemplate amqpTemplate;
    @Autowired
    private AmqpAdmin amqpAdmin;

    /**
     * 发送消息
     */
    public void sendStringMessage(Object object) {
        MqModel mqModel= new MqModel();
        mqModel.setMqNo(System.currentTimeMillis() + "");
        mqModel.setMsg("这是一条消息");
        mqModel.setData(object);
        amqpTemplate.convertAndSend(exchange, route_key, mqModel);
    }

    // 初始化同步
    @PostConstruct
    private void init() {
        // 创建交换机
        amqpAdmin.declareExchange(new DirectExchange(exchange));
        // 创建队列
        amqpAdmin.declareQueue(new Queue(queue, true));
        // 建立绑定关系
        amqpAdmin.declareBinding(new Binding(queue, Binding.DestinationType.QUEUE, exchange, route_key, null));

    }
}

定义接收层:

/**
 * Description: mq接收层
 * User: zhouzhou
 * Date: 2018-08-27
 * Time: 18:39
 */
@Service
@RabbitListener(queues = {"${mq.exchange.queue}"})
public class MessageRecieveService {

    @RabbitHandler
    public void recieveMqModelMessage(MqModel model)  {
        System.out.println("保存数据:" + model);
    }


    @RabbitHandler
    public void recieveStringMessage(String msg)  {

        System.out.println("========================接收文本消息成功==========================");
        System.out.println(msg);
    }


}

启动服务器, 定义一个controller发送消息就可以实现消息的收发了

猜你喜欢

转载自blog.csdn.net/weixin_38399962/article/details/82848491
今日推荐