1.安装rabbitmq
#创建容器启动
docker run -d --restart=always -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3.8-management
管理后台:http://IP:15672

2.创建rabbitmq发送消息模块(这里我们在mq的消费端进行交换机和队列的创建)
<dependencies>
<!--rabbitmq消息队列-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
</dependencies>
3.添加Service方法(发送消息的方法)
@Service
public class RabbitService {
@Autowired
private RabbitTemplate rabbitTemplate;
public boolean sendMessage(String exchange, String routingKey, Object message) {
rabbitTemplate.convertAndSend(exchange, routingKey, message);
return true;
}
}
4.配置mq的消息转换器
- 配置的原因:Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。
不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:
1.数据体积过大
2.有安全漏洞
3.可读性差 - 作用:显然,JDK序列化方式并不合适。我们希望消息体的体积更小、可读性更高,因此可以使用JSON方式来做序列化和反序列化。
@Configuration
public class MQConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
5.需要使用mq发送消息的模块可以依赖此模块,扫描类,在需要使用的地方注入RabbitService调用其方法.需要配置rabbitmq的连接信息.
#rabbitmq地址
spring.rabbitmq.host=192.168.44.165
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
6.rabbitmq的消费端配置
@Component
public class RbListener {
@RabbitListener(bindings = {@QueueBinding(exchange = @Exchange(name = MqConst.EXCHANGE_DIRECT_ORDER),value =@Queue(name =MqConst.QUEUE_ORDER),key = MqConst.ROUTING_ORDER)})
public void consume(OrderMqVo orderMqVo, Message message, Channel channel){
System.out.println("orderMqVo = " + orderMqVo);
}
}
#rabbitmq地址
spring.rabbitmq.host=192.168.44.165
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest