Rabbitmq应用文档
项目集成rabbitmp
修改文件
pom.xml
<spring.version>4.3.5.RELEASE</spring.version>
<jackson.version>2.8.6</jackson.version>
<!--rabbitmq依赖 -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>
applicationContext.xml
<import resource="classpath:applicationContext-*.xml" />
增加文件
applicationContext-rabbit.xml-------部署的时候需要修改该文件内的用户名,密码,ip地址,端口号等
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
<!--配置注解RabbitListener支持 start-->
<rabbit:annotation-driven/>
<bean id="rabbitListenerContainerFactory"
class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="concurrentConsumers" value="3"/>
<property name="maxConcurrentConsumers" value="10"/>
<property name="messageConverter" ref="jackson2JsonMessageConverter"/>
</bean>
<!--配置注解RabbitListener支持 end-->
<!--配置connection-factory,指定连接rabbit server参数 start -->
<rabbit:connection-factory id="connectionFactory"
username="bksx"
password="bksx"
addresses="130.10.8.207:5672,130.10.8.208:5672,130.10.8.209:5672"
publisher-confirms="true"
/>
<!-- host="130.10.8.207" port="5672" -->
<!--配置connection-factory,指定连接rabbit server参数 end -->
<!--定义rabbit template用于数据的接收和发送 start -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
message-converter="jackson2JsonMessageConverter"
receive-timeout="120000"
exchange="exchangeTest">
</rabbit:template>
<!--定义rabbit template用于数据的接收和发送 end -->
<!--指定数据序列化方式 用jackson序列化为json start-->
<bean id="jackson2JsonMessageConverter"
class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter">
</bean>
<!--指定数据序列化方式 用jackson序列化为json end-->
<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 start-->
<rabbit:admin id="connectAdmin" connection-factory="connectionFactory"/>
<!--定义queue start-->
<rabbit:queue name="queueChris" durable="true" auto-delete="false" exclusive="false" declared-by="connectAdmin"/>
<!--
配置详解
durable:是否持久化
exclusive:仅创建者可以使用的私有队列,断开后自动删除
auto-delete:当所有消费端连接断开后,是否自动删除队列
-->
<!--定义queue end-->
<!-- 定义direct exchange,绑定queueTest -->
<rabbit:direct-exchange name="exchangeTest" durable="true" auto-delete="false" declared-by="connectAdmin">
<rabbit:bindings>
<rabbit:binding queue="queueChris" key="queueTestChris"></rabbit:binding>
</rabbit:bindings>
</rabbit:direct-exchange>
</beans>
业务文件
消息发送端调用rabbitMq代码:
消息同步返回
@Autowired
private AmqpTemplate amqpTemplate;
private final String KEY="queueTestChris"; {
// 居住证
Object msg = new Object; zdbh:站点编号;yyrq:yyyyMMddHHmmss预约日期
Object sfyycg = (Object) amqpTemplate.convertSendAndReceive(KEY, fo);
}
消息异步返回
@Autowired
private AsyncRabbitTemplate asyncRabbitTemplate;
AsyncRabbitTemplate.RabbitConverterFuture<Object> RabbitConverterFuture = asyncRabbitTemplate.convertSendAndReceive(KEY, o);
RabbitConverterFuture.addCallback(new ListenableFutureCallback<Boolean>(){
@Override
public void onSuccess(Object o) {
//TODO 处理成功调用
}
@Override
public void onFailure(Throwable throwable) {
//TODO处理失败调用
}
});
消息处理端调用rabbitMq代码
@Service
public class ChrisConsumer {
private Logger logger = LoggerFactory.getLogger(ChrisConsumer.class);
@RabbitListener(queues = "queueChris")
@SendTo
public Object messageHandler(Object o) throws Exception {
//TODO 消息处理端业务处理代码
return result; //业务返回对象,可以自定义类型
}
}