您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 汕尾分类信息网,免费分类信息发布

java中使用Spring和AMQP发送接收消息(下)

2024/4/8 20:03:21发布38次查看
上篇讲了使用rabbitmq发送消息,本篇则来讲接收消息。
在传统jms中有两种从队列获取信息的方式,使用jmstemplate的同步方式以及使用消息驱动pojo的异步方式。spring amqp也提供了类似的方式来获取通过amqp发送的消息。
使用rabbittemplate来接收消息rabbittemplate提供的接收信息的方法中最简单的就是receive()方法,通过该方法就可以从队列中获取一个message对象:
message message = rabbit.receive(spittle.test.queue);
或者也可以通过配置获取消息的默认队列,这是通过在配置模板的时候,设置queue属性实现的:
<template id="rabbittemplate" connection-factory="connectionfactory"exchange="spittle.test.exchange" routing-key="spittle.test" queue="spittle.test.queue" />
这样的话,在调用receive()方法时,不需要设置任何参数就能从默认队列中获取消息:
message message = rabbit.receive( );
获取到message对象后,一般需要将它的body属性中的字节数组转换为想要的对象,就像在发送的时候将领域对象转换为message一样,将接收到的message转换为领域对象也很繁琐。这里可以考虑使用rabbittemplate的receiveandconvert()方法作为替代方案:
spittle spittle = (spittle) rabbit.receiveandconvert(spittle.test.queue);
receiveandconvert()方法会使用与sendandconvert()方法相同的消息转换器,将message对象转换为原始的类型。
调用receive()和receiveandconvert()方法都会立即返回,如果队列中没有等待的消息,将会得到null。这时一般需要程序员自己管理轮询以及必要的线程,实现队列监控。如果不想每次都同步轮询等待消息到达,可以使用spring amqp提供的消息驱动pojo,下面就看看使用消息驱动pojo的方式来接收消息。
使用消息驱动pojo来接收消息如果想要在消息驱动pojo中异步地消费使用spittle对象,先要解决这个pojo本身,如下的spittletesthandler扮演了这个角色:
public class spittletesthandler {public void handlespittletest (spittle spittle) {         ...     } }
其实这个类并没有依赖于amqp,不管通过什么机制传递过来spittle对象,它都能够处理。
这里还需要在spring应用上下文中将spittletesthandler声明为一个bean:
<bean id="spittlelistener"class="com.***.spittr.test.spittletesthandler">
最后要声明一个监听器容器和监听器,当消息到达的时候,能够调用spittletesthandler,配置如下:
<listener-container connection-factory="connectionfactory"><listener ref="spittlelistener" method="handlespittletest" queue-names="spittle.test.queue" /></listener-container>
上面的<listener-container>与<listener>元素都来自rabbit命名空间。并通过queue-names属性来指定要监听的队列,这里只设定了一个要监听的队列,如果要设置多个队列的话,用逗号隔开。到这里消息接收就完成了,拿到消息后就可以在相应方法里执行相应处理了。
以上就是java中使用spring和amqp发送接收消息(下)的详细内容。
汕尾分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录