这里我分别搭建两个springboot项目,一个作为生产者客户端,一个作为消费者客户端。当然你也可以只搭建一个springboot项目,即作为生产者又作为消费者来使用。
一、在项目中添加RabbitMQ依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
二、在application.yml添加配置:
spring:
rabbitmq:
host: 127.0.0.1 #rabbitmq地址
port: 5672 #rabbitmq端口
username: guest #认证账号,rabbitmq的默认账号guest
password: guest #认证密码,rabbitmq的默认密码guest
virtual-host: /debug #虚拟主机,默认为/
三、自定义消息序列化:
在消息发送和接收时,需要用到MessageConverter接口,这里会统一把对象和消息进行转换。
springboot中默认使用的序列化类是SimpleMessageConverter,当数据是byte[ ]不做转换处理;当是String 类型时,转换成字节数组;当是Java对象时,则使用JDK序列化将消息转成字节数组,并包含class类名和类对应方法等消息,而且消费端进行反序列化也需要存在相同类路径名的类。
这里使用序列化类Jackson2JsonMessageConverter将消息以json格式进行传输。
生产者端:
@Configuration
public class RabbitMQConfig {
/**
* 消息序列化
* @param connectionFactory
* @return
*/
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
return rabbitTemplate;
}
}
消费者端:
@Configuration
public class RabbitMQConfig {
/**
* 消息序列化
* @param connectionFactory
* @return
*/
@Bean
public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(new Jackson2JsonMessageConverter());
return factory;
}
}