- 浏览: 155503 次
- 性别:
- 来自: 奥克兰
文章分类
最新评论
-
u012625419:
...
CXF之用spring配置服务端和客户端实例(转) -
bambooshangye:
CXF之用spring配置服务端和客户端实例(转) -
最佳蜗牛:
写的很好,谢谢!
tomcat下的server.xml文件和context.xml (转) -
mohaowen1989:
亲 有中文版的么?在grails基础上的spring-secu ...
Simplified Spring Security with Grails(转) -
douhongyang:
挺好,,思路很清晰,
spring security详解教程 (转)
在下面的例子中,分别发送一个Persistent和nonpersistent的消息,然后关闭退出JMS。
import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveMQQueue; public class DeliveryModeSendTest { public static void main(String[] args) throws Exception { ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost"); Connection connection = factory.createConnection(); connection.start(); Queue queue = new ActiveMQQueue("testQueue"); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(queue); producer.setDeliveryMode(DeliveryMode.PERSISTENT); producer.send(session.createTextMessage("A persistent Message")); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); producer.send(session.createTextMessage("A non persistent Message")); System.out.println("Send messages sucessfully!"); } }
运行上面的程序,当输出“Send messages sucessfully!”时,说明两个消息都已经发送成功,然后我们结束它,来停止JMS Provider。
接下来我们重新启动JMS Provicer,然后添加一个消费者:
import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveMQQueue; public class DeliveryModeReceiveTest { public static void main(String[] args) throws Exception { ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost"); Connection connection = factory.createConnection(); connection.start(); Queue queue = new ActiveMQQueue("testQueue"); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageConsumer comsumer = session.createConsumer(queue); comsumer.setMessageListener(new MessageListener(){ public void onMessage(Message m) { try { System.out.println("Consumer get " + ((TextMessage)m).getText()); } catch (JMSException e) { e.printStackTrace(); } } }); } }
运行上面的程序,可以得到下面的输出结果:
Consumer get A persistent Message
可以看出消息消费者只接收到一个消息,它是一个Persistent的消息。而刚才发送的non persistent消息已经丢失了。
另外, 如果发送一个non persistent消息, 而刚好这个时候没有消费者在监听, 这个消息也会丢失.
评论
1 楼
hyneng
2011-05-05
运行第二个例子有错
org.apache.activemq.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag. at org.apache.activemq.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:52) at org.apache.activemq.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.java:95) at org.apache.activemq.protobuf.BaseMessage.mergeUnframed(BaseMessage.java:185) at org.apache.activemq.protobuf.BaseMessage.mergeUnframed(BaseMessage.java:213) at org.apache.activemq.protobuf.BaseMessage.mergeFramed(BaseMessage.java:237) at org.apache.activemq.store.kahadb.MessageDatabase.load(MessageDatabase.java:825) at org.apache.activemq.store.kahadb.KahaDBStore.loadMessage(KahaDBStore.java:955) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$5.execute(KahaDBStore.java:493) at org.apache.kahadb.page.Transaction.execute(Transaction.java:728) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.recoverNextMessages(KahaDBStore.java:485) at org.apache.activemq.store.ProxyMessageStore.recoverNextMessages(ProxyMessageStore.java:88) at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.doFillBatch(QueueStorePrefetch.java:97) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.fillBatch(AbstractStoreCursor.java:260) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.reset(AbstractStoreCursor.java:108) at org.apache.activemq.broker.region.cursors.StoreQueueCursor.reset(StoreQueueCursor.java:157) at org.apache.activemq.broker.region.Queue.doPageInForDispatch(Queue.java:1712) at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1932) at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1440) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:127) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) 1593 [BrokerService[localhost] Task-1] ERROR org.apache.activemq.broker.region.cursors.AbstractStoreCursor - QueueStorePrefetch2569862 - Failed to fill batch java.lang.RuntimeException: org.apache.activemq.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag. at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.fillBatch(AbstractStoreCursor.java:263) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.reset(AbstractStoreCursor.java:108) at org.apache.activemq.broker.region.cursors.StoreQueueCursor.reset(StoreQueueCursor.java:157) at org.apache.activemq.broker.region.Queue.doPageInForDispatch(Queue.java:1712) at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1932) at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1440) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:127) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Caused by: org.apache.activemq.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag. at org.apache.activemq.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:52) at org.apache.activemq.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.java:95) at org.apache.activemq.protobuf.BaseMessage.mergeUnframed(BaseMessage.java:185) at org.apache.activemq.protobuf.BaseMessage.mergeUnframed(BaseMessage.java:213) at org.apache.activemq.protobuf.BaseMessage.mergeFramed(BaseMessage.java:237) at org.apache.activemq.store.kahadb.MessageDatabase.load(MessageDatabase.java:825) at org.apache.activemq.store.kahadb.KahaDBStore.loadMessage(KahaDBStore.java:955) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$5.execute(KahaDBStore.java:493) at org.apache.kahadb.page.Transaction.execute(Transaction.java:728) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.recoverNextMessages(KahaDBStore.java:485) at org.apache.activemq.store.ProxyMessageStore.recoverNextMessages(ProxyMessageStore.java:88) at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.doFillBatch(QueueStorePrefetch.java:97) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.fillBatch(AbstractStoreCursor.java:260) ... 10 more 1593 [BrokerService[localhost] Task-1] ERROR org.apache.activemq.broker.region.Queue - Failed to page in more queue messages java.lang.RuntimeException: java.lang.RuntimeException: org.apache.activemq.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag. at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.reset(AbstractStoreCursor.java:111) at org.apache.activemq.broker.region.cursors.StoreQueueCursor.reset(StoreQueueCursor.java:157) at org.apache.activemq.broker.region.Queue.doPageInForDispatch(Queue.java:1712) at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1932) at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1440) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:127) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.RuntimeException: org.apache.activemq.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag. at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.fillBatch(AbstractStoreCursor.java:263) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.reset(AbstractStoreCursor.java:108) ... 9 more Caused by: org.apache.activemq.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag. at org.apache.activemq.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:52) at org.apache.activemq.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.java:95) at org.apache.activemq.protobuf.BaseMessage.mergeUnframed(BaseMessage.java:185) at org.apache.activemq.protobuf.BaseMessage.mergeUnframed(BaseMessage.java:213) at org.apache.activemq.protobuf.BaseMessage.mergeFramed(BaseMessage.java:237) at org.apache.activemq.store.kahadb.MessageDatabase.load(MessageDatabase.java:825) at org.apache.activemq.store.kahadb.KahaDBStore.loadMessage(KahaDBStore.java:955) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$5.execute(KahaDBStore.java:493) at org.apache.kahadb.page.Transaction.execute(Transaction.java:728) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.recoverNextMessages(KahaDBStore.java:485) at org.apache.activemq.store.ProxyMessageStore.recoverNextMessages(ProxyMessageStore.java:88) at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.doFillBatch(QueueStorePrefetch.java:97) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.fillBatch(AbstractStoreCursor.java:260) ... 10 more
发表评论
-
深入掌握JMS(八):JMSReplyTo (转)
2010-10-19 15:39 1330在下面的例子中,首先创建两个Queue,发送者给一个Queue ... -
深入掌握JMS(六):消息头(转)
2010-10-19 15:36 1603一个消息对象分为三部分:消息头(Headers),属 ... -
深入掌握JMS(五):实战Topic (转)
2010-10-19 15:35 863与Queue不同的是,Topic实现的是发布/订阅模型, ... -
深入掌握JMS(四):实战Queue (转)
2010-10-19 15:31 886Queue实现的是点到点 ... -
深入掌握JMS(三):MessageListener(转)
2010-10-19 15:30 985消息的消费者接收消息可以采用两种方式: 1、cons ... -
深入掌握JMS(二):一个JMS例子 (转)
2010-10-19 15:29 1015前一讲简单的介绍了一下JMS的基本概念, ... -
深入掌握JMS(一):JSM基础(转)
2010-10-19 15:25 9121. JMS基本概念 JMS(Java Messa ... -
深入JMS - 3 - 消息监听者(转)
2010-05-28 05:48 2040消息的消费者接收消息可以采用两种方式: 1、consum ... -
深入JMS - 2 - 案例入门(转)
2010-05-28 05:46 1719前一讲简单的介绍了一下JMS的基本概念, 这一讲结合一个例子让 ... -
深入JMS - 1 - 基本概念(转)
2010-05-28 05:39 9341.JMS基本概念 JMS(JavaMe ...
相关推荐
javax.jms.DeliveryMode.class javax.jms.Connection.class javax.jms.Session.class javax.jms.ConnectionMetaData.class javax.jms.ExceptionListener.class javax.jms.ServerSessionPool.class javax.jms....
javax.jms.DeliveryMode.class javax.jms.Destination.class javax.jms.ExceptionListener.class javax.jms.IllegalStateException.class javax.jms.InvalidClientIDException.class javax.jms....
基于Java通讯开发jms源代码 (jms通讯开发源码) java,net,socket,通讯开发,jms /* * @(#)Message.java 1.60 02/04/09 * * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved. * * SUN ...
producer->setDeliveryMode(DeliveryMode::NON_PERSISTENT); // Create the Thread Id String string threadIdStr = Long::toString(Thread::currentThread()->getId()); // Create a messages string text =...
>第二种情况是持久化磁盘,具体是将queue的持久化标识durable设置为true,则代表是一个持久的队列,发送消息的时候讲deliveryMode=2 > >第三是主要消费者采取的是自动确认消息模式?可以改成手动确定的模式,但是...