ActiveMQ例子_2

来源:互联网 发布:打电话软件 编辑:程序博客网 时间:2024/06/01 20:03

消费者接受消息的方法:

1.第一种方法使用consumer.receive() 或 consumer.receive(int timeout)接受消息,消息的接收者会一直等待下去,直到有消息到达,或者超时。

2.第二种方法:消息消费者注册一个MessageListener,当有消息到达的时候,会回调它的onMessage()方法。

第一种方法见:http://blog.csdn.net/adam_wzs/article/details/51145800

第二种方法见下文,如果不会配置ActiveMQ环境请看第一种方法连接。


ConsumerTool.java

package com.wangzs.t3;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.MessageListener;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;/** * @Title 消息消费者工具类 * @Description 消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。 * @author wangzs * @date 2016-4-26 */public class ConsumerTool implements MessageListener {private String user;private String password;private String url;private String queueName; // queueName是一个服务器的queueprivate ConnectionFactory connectionFactory = null; // 连接工厂,客户用来创建连接的对象private Destination destination = null; // 指定它生产的消息的目标和它消费的消息的来源的对象private Connection connection = null; // 封装了客户与 JMS 提供者之间的一个虚拟的连接private Session session = null; // 生产和消费消息的一个单线程上下文private MessageConsumer consumer = null; // 消息消费者public ConsumerTool() {super();}public ConsumerTool(String user, String password, String url, String queueName) {super();this.user = user;this.password = password;this.url = url;this.queueName = queueName;}public void initialize() {connectionFactory = new ActiveMQConnectionFactory(this.getUser(), this.getPassword(), this.getUrl());try {connection = connectionFactory.createConnection();connection.start();session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);destination = session.createQueue(this.getQueueName());consumer = session.createConsumer(destination);} catch (JMSException e) {e.printStackTrace();}}// 消费消息public void consumeMessage() {System.out.println("Consumer:->Begin listening...");try {consumer.setMessageListener(this);} catch (JMSException e) {e.printStackTrace();}}@Overridepublic void onMessage(Message message) {try {if (message instanceof TextMessage) {TextMessage txtMsg = (TextMessage) message;String msg = txtMsg.getText();System.out.println("Consumer:->Received: " + msg);}} catch (JMSException e) {e.printStackTrace();}}// 关闭连接public void close() {try {System.out.println("Consumer:->Closing connection");if (consumer != null) {consumer.close();}if (session != null) {session.close();}if (connection != null) {connection.close();}} catch (JMSException e) {e.printStackTrace();}}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getQueueName() {return queueName;}public void setQueueName(String queueName) {this.queueName = queueName;}}

ProducerTool.java

package com.wangzs.t3;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;/** * @Title 消息生产者工具类 * @Description 消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地 * @author wangzs * @date 2016-4-26 */public class ProducerTool {private String user;private String password;private String url;private String queueName; // queueName是一个服务器的queueprivate ConnectionFactory connectionFactory = null; // 连接工厂,客户用来创建连接的对象private Destination destination = null; // 指定它生产的消息的目标和它消费的消息的来源的对象private Connection connection = null; // 封装了客户与 JMS 提供者之间的一个虚拟的连接private Session session = null; // 生产和消费消息的一个单线程上下文private MessageProducer producer = null; // 消息生产者public ProducerTool() {super();}public ProducerTool(String user, String password, String url, String queueName) {super();this.user = user;this.password = password;this.url = url;this.queueName = queueName;}public void initialize() {connectionFactory = new ActiveMQConnectionFactory(this.getUser(), this.getPassword(), this.getUrl());try {connection = connectionFactory.createConnection();connection.start();session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);destination = session.createQueue(this.getQueueName());producer = session.createProducer(destination);producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// NON_PERSISTENT:不要求 JMS Producer 持久保存消息。} catch (JMSException e) {e.printStackTrace();}}// 发送消息public void produceMessage(String message) {try {TextMessage msg = session.createTextMessage(message);System.out.println("Producer:->Sending message: " + message);producer.send(msg);} catch (JMSException e) {e.printStackTrace();}}// 关闭连接public void close() {try {System.out.println("Producer:->Closing connection");if (producer != null) {producer.close();}if (session != null) {session.close();}if (connection != null) {connection.close();}} catch (JMSException e) {e.printStackTrace();}}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getQueueName() {return queueName;}public void setQueueName(String queueName) {this.queueName = queueName;}}

JunitTest.java

package com.wangzs.t3;import org.apache.activemq.ActiveMQConnection;import org.junit.Test;/** * @Title ActiveMQ工具类测试 * @Description * @author wangzs * @date 2016-4-26 */public class JunitTest {@Testpublic void test1() throws InterruptedException {ConsumerTool consumer = new ConsumerTool(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,ActiveMQConnection.DEFAULT_BROKER_URL, "WangzsQueue");ProducerTool producer = new ProducerTool(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,ActiveMQConnection.DEFAULT_BROKER_URL, "WangzsQueue");System.out.println(ActiveMQConnection.DEFAULT_BROKER_URL + "------------");// 消费者consumer.initialize();consumer.consumeMessage();// 生产者producer.initialize();for (int i = 0; i < 10; i++) {Thread.sleep(500);producer.produceMessage("Hello, world!  " + i);}}}

测试结果:

failover://tcp://localhost:61616------------2016-04-26 14:28:20 DEBUG FailoverTransport:660 - Reconnect was triggered but transport is not started yet. Wait for start to connect the transport. 2016-04-26 14:28:20 DEBUG FailoverTransport:302 - Started. 2016-04-26 14:28:20 DEBUG FailoverTransport:653 - Waking up reconnect task 2016-04-26 14:28:20 DEBUG FailoverTransport:683 - urlList connectionList:[tcp://localhost:61616], from: [tcp://localhost:61616] 2016-04-26 14:28:20 DEBUG FailoverTransport:855 - Attempting connect to: tcp://localhost:61616 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:82 - Sending: WireFormatInfo { version=7, properties={CacheSize=1024, CacheEnabled=true, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} 2016-04-26 14:28:20 DEBUG InactivityMonitor:331 - Using min of local: WireFormatInfo { version=7, properties={CacheSize=1024, CacheEnabled=true, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} and remote: WireFormatInfo { version=7, properties={CacheSize=1024, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000, MaxInactivityDuration=30000, CacheEnabled=true, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:118 - Received WireFormat: WireFormatInfo { version=7, properties={CacheSize=1024, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000, MaxInactivityDuration=30000, CacheEnabled=true, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:125 - tcp://localhost/127.0.0.1:61616 before negotiation: OpenWireFormat{version=7, cacheEnabled=false, stackTraceEnabled=false, tightEncodingEnabled=false, sizePrefixDisabled=false} 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:140 - tcp://localhost/127.0.0.1:61616 after negotiation: OpenWireFormat{version=7, cacheEnabled=true, stackTraceEnabled=true, tightEncodingEnabled=true, sizePrefixDisabled=false} 2016-04-26 14:28:20 DEBUG FailoverTransport:865 - Connection established 2016-04-26 14:28:20  INFO FailoverTransport:891 - Successfully connected to tcp://localhost:61616 Consumer:->Begin listening...2016-04-26 14:28:20 DEBUG FailoverTransport:660 - Reconnect was triggered but transport is not started yet. Wait for start to connect the transport. 2016-04-26 14:28:20 DEBUG FailoverTransport:302 - Started. 2016-04-26 14:28:20 DEBUG FailoverTransport:653 - Waking up reconnect task 2016-04-26 14:28:20 DEBUG FailoverTransport:683 - urlList connectionList:[tcp://localhost:61616], from: [tcp://localhost:61616] 2016-04-26 14:28:20 DEBUG FailoverTransport:855 - Attempting connect to: tcp://localhost:61616 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:82 - Sending: WireFormatInfo { version=7, properties={CacheSize=1024, CacheEnabled=true, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} 2016-04-26 14:28:20 DEBUG InactivityMonitor:331 - Using min of local: WireFormatInfo { version=7, properties={CacheSize=1024, CacheEnabled=true, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} and remote: WireFormatInfo { version=7, properties={CacheSize=1024, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000, MaxInactivityDuration=30000, CacheEnabled=true, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:118 - Received WireFormat: WireFormatInfo { version=7, properties={CacheSize=1024, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000, MaxInactivityDuration=30000, CacheEnabled=true, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:125 - tcp://localhost/127.0.0.1:61616 before negotiation: OpenWireFormat{version=7, cacheEnabled=false, stackTraceEnabled=false, tightEncodingEnabled=false, sizePrefixDisabled=false} 2016-04-26 14:28:20 DEBUG WireFormatNegotiator:140 - tcp://localhost/127.0.0.1:61616 after negotiation: OpenWireFormat{version=7, cacheEnabled=true, stackTraceEnabled=true, tightEncodingEnabled=true, sizePrefixDisabled=false} 2016-04-26 14:28:20 DEBUG FailoverTransport:865 - Connection established 2016-04-26 14:28:20  INFO FailoverTransport:891 - Successfully connected to tcp://localhost:61616 Producer:->Sending message: Hello, world!  0Consumer:->Received: Hello, world!  0Producer:->Sending message: Hello, world!  1Consumer:->Received: Hello, world!  1Producer:->Sending message: Hello, world!  2Consumer:->Received: Hello, world!  2Producer:->Sending message: Hello, world!  3Consumer:->Received: Hello, world!  3Producer:->Sending message: Hello, world!  4Consumer:->Received: Hello, world!  4Producer:->Sending message: Hello, world!  5Consumer:->Received: Hello, world!  5Producer:->Sending message: Hello, world!  6Consumer:->Received: Hello, world!  6Producer:->Sending message: Hello, world!  7Consumer:->Received: Hello, world!  7Producer:->Sending message: Hello, world!  8Consumer:->Received: Hello, world!  8Producer:->Sending message: Hello, world!  9Consumer:->Received: Hello, world!  9



1 0