<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
首先引入RabbitMq jar包
监听器:
要实现监听者首先要先实现接口:MessageListener 这个接口主要作用就是监听接口接收异步传递的Amqp消息。
/**
*
* 消费监听类
* @author HeWei123
*/
@Slf4j
public class FooMessageListener implements MessageListener {
/**
* 接口监听的消息
* @param message 消息体
*/
@Override
public void onMessage(Message message) {
String messageBody = new String(message.getBody());
log.info("FooMessageListener 监听者接收消息:{}", messageBody);
sendMall(messageBody);
}
/**
* 此处可以执行自己的逻辑代码
* @param map
*/
public void sendMall(String map){
log.info("监听者逻辑处理收到数据:{}",maMallPojo);
}
}
以上代码则配置监听者完成。但是只是这样还不能让消息传入进去,需要将 FooMessageListener 类在配置类中写入
RabbitMq配置类
/**
* 配置 rabbitMq 连接属性
* 配置地址
* 虚拟机
* 账号
* 密码
* 启动
* @return
*/
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses("127.0.0.1:5672");
connectionFactory.setVirtualHost("test");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
return connectionFactory;
}
配置 RabbitTemplate类 这个类主要就是用于发送消息
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) throws IOException {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
return rabbitTemplate;
}
声明 Queue 队列 和 Exchange 交换器 和 2者绑定的key BindingKey
/**
* 声明队列
* @return
*/
@Bean
public Queue directRabbitMqQueue(){
return new Queue(rabbitmqDirectQueue,true);
}
/**
* 声明 交换器
* @return
*/
@Bean
public DirectExchange directRabbitMqExchange(){
return new DirectExchange(rabbitmqDirectExchange,true,false);
}
/**
* 配置 队列和 交换器 绑定并声明配置 key
* @return
*/
@Bean
Binding bindingExchangeMessage() {
return BindingBuilder.bind(directRabbitMqQueue()).to(directRabbitMqExchange()).with(rabbitmqDirectRoutingKey);
}
上述配置全部配置完成 创建一个消息发送测试方法试验一下
@RunWith(SpringRunner.class)
@SpringBootTest
public class MqMessageListenerMain {
@Autowired private RabbitTemplate rabbitTemplate;
@Value("${rabbitmqDirectExchange}")
private String rabbitmqDirectExchange;
@Value("${rabbitmqDirectRoutingKey}")
private String rabbitmqDirectRoutingKey;
@Test
public void convertAndSend(){
rabbitTemplate.convertAndSend(rabbitmqDirectExchange,rabbitmqDirectRoutingKey,"hello wordl");
}
}
监听器已收到刚刚发送的信息 监听器配置完成
2020-08-24 21:41:53.916 INFO 19836 --- [sageContainer-1] com.system.mq.监听器.FooMessageListener : FooMessageListener 监听者接收消息:hello wordl
2020-08-24 21:41:53.916 INFO 19836 --- [sageContainer-1] com.system.mq.监听器.FooMessageListener : 监听者逻辑处理收到数据:hello wordl