Spring实战4介绍了AMQP消息高级协议。进而提到了AMQP协议的实现——RabbitMQ。
RabbitMQ作为一个消息代理中间件。非常的流行,exchange的使用,让消息生产者和消息队列实现了解耦。提供了多种消息路由的方式。
本文不谈原理,只谈集成
1 .引入依赖
2 .RabbitMQ配置文件
3 .占位符配置
4 .使用RabbitMQ
1 .引入依赖
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
2 .RabbitMQ配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/rabbit"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--rabbitmq工厂配置-->
<connection-factory id="connectionFactory"
host="${rabbitmq.host}"
port="${rabbitmq.port}"
username="${rabbitmq.username}"
password="${rabbitmq.password}"/>
<!--rabbitmq模板类-->
<template id="rabbitTemplate" encoding="utf-8" connection-factory="connectionFactory" />
<admin connection-factory="connectionFactory"/>
<!--定义3个队列-->
<queue name="spittle.alert.queue.1" />
<queue name="spittle.alert.queue.2" />
<queue name="spittle.alert.queue.3" />
<!--定义一个fanout类型的exchange-->
<fanout-exchange name="spittle.fanout">
<bindings>
<binding queue="spittle.alert.queue.1"></binding>
<binding queue="spittle.alert.queue.2"></binding>
<binding queue="spittle.alert.queue.3"></binding>
</bindings>
</fanout-exchange>
<!--定义一个基于rabbitMQ的监听POJO-->
<!--<beans:bean id="userInfoListener" class="cn.org.javamvc.config.rabbitmq.UserInfoAlertHandler"/>-->
<!--<listener-container connection-factory="connectionFactory">-->
<!--<listener-->
<!--ref="userInfoListener"-->
<!--method="handleUserInfoAlert"-->
<!--queue-names="spittle.alert.queue.1" />-->
<!--</listener-container>-->
</beans:beans>
3 .占位符配置
你可能也注意到了,在上面的rabbitmq的配置文件中,我们使用了${ }的占位符设置。使用占位符,就涉及到了PropertySourcesPlaceholderConfigurer类的实例化,这个类就是用来帮助spring配置文件引用外置properties配置文件的。
如下图,实例化PropertySourcesPlaceholderConfigurer类
@Configuration
//java config方式引入xml显示配置
@ImportResource("classpath:config/rabbit/application-rabbit.xml")
public class RabbitMQConfig {
//实例化PropertySourcesPlaceholderConfigurer配置
@Bean
public PropertySourcesPlaceholderConfigurer propertySource(){
PropertySourcesPlaceholderConfigurer property = new PropertySourcesPlaceholderConfigurer();
//加载classpath路径下的rabbitmq.properties配置文件
ClassPathResource classPathResources = new ClassPathResource("rabbitmq.properties");
property.setLocations(classPathResources);
return property;
}
}
我新建的这个ssm工程,没有使用web.xml。使用的是java config方式。所以不能使用ContextLoaderListener加载Spring的配置文件,使用的是java config方式加载Spring配置文件
以上就完成了RabbitMQ的配置工作。下面,我们使用RabbitMQ
前提肯定是你已经安装好了一个RabbitMQ的服务啊。推荐使用windows的安装方式,简单
4 .使用RabbitMQ
@RestController
@RequestMapping("/rabbit")
public class RabbitMQController {
@Autowired
private RabbitTemplate rabbitTemplate;
@RequestMapping("/sendMessage")
public void sendMessage(){
UserInfo userInfo = new UserInfo();
userInfo.setPassword("111111");
userInfo.setUniqueId("222222");
userInfo.setUserName("测试");
//将userInfo用户发送到RabbitMQ
rabbitTemplate.convertAndSend("spittle.fanout","",userInfo);
}
@RequestMapping("/receiveMessage")
public String receiveMessage(){
//从RabbitMQ的指定队列获取消息
UserInfo result = (UserInfo) rabbitTemplate.receiveAndConvert("spittle.alert.queue.1");
JSONObject jsonObject = new JSONObject();
return jsonObject.toJSONString(result);
}
}
rabbitTemplate提供了很多convertAndSend方法的重载方式,可以用Idea下载源码自行查看,比较简单。就不说了
同理,receiveAndConvert方法,也是。帮助我们省去了对象转换的复杂逻辑,直接将接收到的消息强转成所需要的对象即可。其他重载方式,有兴趣的同学,可以看一下源码
来源:CSDN
作者:梦想-风清扬
链接:https://blog.csdn.net/qq_39839075/article/details/103639111