导入相关依赖
<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发送消息就可以实现消息的收发了