您的位置:首页 > 编程语言 > Java开发

spring rabbitmq 配置文件简单介绍

2016-07-12 00:00 218 查看
摘要: rabbitmq 是amqp协议 协议的一个实现,可以使用它了对各应用进行解耦,spring 提供了对rabbitmq 的封装,下面简单就spring 的xml进行解说

rabbitmq 一个java 开源的消息中间件,可以用来对应用之间的调用解耦,比如说,我要对登陆事件进行多种操作(记录日志、更新某些信息)。这些应用依赖登陆事件,但登陆本身并不对这些应用有依赖,可以通过消息中间件的方式进行解耦。

由对登陆事件感兴趣的应用系统订阅消息,对消息处理,完成业务需求,同时对各系统解耦。

rabbitmq 的介绍以及教程网上有,需要的可以百度,这里仅上两端带注释的代码

//生产者

//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.22.111");
factory.setUsername("guest");
factory.setPassword("guest");
//创建连接
Connection connection = factory.newConnection();
//创建channel 所有的消息操作基于channel
Channel channel = connection.createChannel(10);
//声明一个exchange topic 类型
channel.exchangeDeclare("crm.topic", "topic",true,false,false,null);
//声明一个队列
channel.queueDeclare("app.login.user", true, false, false, null);
//将queue 与exchange 绑定
channel.queueBind("app.login.user", "crm.topic", "app.login.user");
//发送消息,指定与exchange & routingKey
channel.basicPublish("crm.topic", "app.login.user", null, "sxxxxxxxxxx".getBytes());

channel.close();
connection.close();

消费者

//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.22.111");
factory.setUsername("guest");
factory.setPassword("guest");
//创建连接
Connection connection = factory.newConnection();
Channel channel = connection.createChannel(10);

//声明一个队列
channel.queueDeclare("crmcommon.login.user", true, false, false, null);
//将queue 与exchange 绑定
channel.queueBind("crmcommon.login.user", "crm.topic", "crmcommon.login.user");
//消费
GetResponse r = channel.basicGet("crmcommon.login.user", true);
System.out.println(new String(r.getBody()));
channel.close();
connection.close();

以上是一个简单的生产者,一个简单的消费者。

下面是使用spring整合的配置

<!-- 登陆事件 -->
<!-- 连接工厂 bean -->
<rabbit:connection-factory id="connectionFactory" host="${amqp.rabbit.host}"
username="${amqp.rabbit.username}"
password="${amqp.rabbit.password}"
/>

<!-- RabbitAdmin 用于管理exchange,queue -->
<rabbit:admin id="rabbitAdmin" connection-factory="connectionFactory"/>

<!-- 声明一个队列 -->
<rabbit:queue name="crmcommon.login.user" id="loginQuene" ></rabbit:queue>

<!-- 声明一个exchange -->
<rabbit:topic-exchange id="crmTopic" name="crm.topic" auto-delete="false" durable="true" auto-declare="true">
<rabbit:bindings>
<rabbit:binding pattern="crmcommon.login.#" queue="crmcommon.login.user" ></rabbit:binding>
</rabbit:bindings>
</rabbit:topic-exchange>

<!-- 消息转换器 pojo ==> json 提供了 JsonMessageConverter SimpleMessageConverter
Jackson2JsonMessageConverter SerializerMessageConverter 这几种转换器 -->

<bean id="messageConverter" class="org.springframework.amqp.support.converter.JsonMessageConverter" />

<!-- 操作的模板,和jdbc 一样spring 提供了一个封装的模板类 -->
<rabbit:template id="rabbitTamplate" exchange="crm.topic" routing-key="crmcommon.login.user"
connection-factory="connectionFactory"
message-converter="messageConverter"></rabbit:template>

<!--异步执行线程池,对jdk 线程池的封装,暴露部分参数 -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="2"></property>
<property name="maxPoolSize" value="5"></property>
</bean>

<!-- 消费者 需要实现 ChannelAwareMessageListener 或 MessageListener -->
<bean id="listener" class="com.xx.xx.xx.rabbit.LoginListener" />

<!-- listener 容器 可以绑定多个消费者,一个消费者可以绑定多个queue -->
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="manual" message-converter="messageConverter" task-executor="taskExecutor" >
<rabbit:listener ref="listener" queues="loginQuene"/>
</rabbit:listener-container>

可以看到spring 配置也是要配置上面代码的基本元素,spring 同时提供了一下封装类,对消息的转换,操作模板等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring rabbitmq