package org.opoo.samples.activemq; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; /** * JMS示例。 * * @author <a href="http://opoo.org">opoo.org</a> * */ public class ActiveMQJmsMain { private static final String QUEUE = "jmsLocalQueue"; /** * 消息接收(消费)线程。 */ public static class ReceiveRunnable implements Runnable { private AtomicBoolean stopReceiving = new AtomicBoolean(); private JmsTemplate consumerTemplate; public ReceiveRunnable(JmsTemplate consumerTemplate) { super(); this.consumerTemplate = consumerTemplate; } public void run() { while (!stopReceiving.get()) { try { Message message = consumerTemplate.receive(QUEUE); System.out.println(Thread.currentThread() + " 收到消息:" + message); } catch (Exception e) { e.printStackTrace(); } } } public void shutdown() { stopReceiving.set(true); } } /** * 消息发送(生产)线程。 * */ public static class SendRunnable implements Runnable { private AtomicBoolean stopSending = new AtomicBoolean(); private ArrayBlockingQueue<String> messagesToSend = new ArrayBlockingQueue<String>(1); private JmsTemplate producerTemplate; public SendRunnable(JmsTemplate producerTemplate) { super(); this.producerTemplate = producerTemplate; } public void send(String message) { try { messagesToSend.put(message); } catch (InterruptedException e) { System.err.println("Unable to send even: " + e); } } public void run() { while (!stopSending.get()) { try { final String message = messagesToSend.take(); producerTemplate.send(QUEUE, new MessageCreator() { public Message createMessage(Session session) throws JMSException { System.out.println(Thread.currentThread() + " 发出消息:" + message); return session.createTextMessage(message); } }); } catch (Exception e) { e.printStackTrace(); } } } public void shutdown() { stopSending.set(true); } } /** * <p>mvn exec:java * * * <p>1.在应用内部启动ActiveMQ服务: * <p>直接执行 <code>mvn exec:java</code> 即可。 * 可通过系统属性 <code>msg.data.home.dir</code> 来指定JMS数据目录的位置 * <code>mvn exec:java -Dmsg.data.home.dir=/var/jmsDataDir</code> 或者 * <code>mvn exec:java -Dmsg.data.home.dir=C:/jmsDataDir</code>。 * * <p>2. 独立启动ActiveMQ服务: * <p>需要<a href="http://activemq.apache.org/download.html">下载ActiveMQ发行包</a>,并运行 bin/activemq 启动ActiveMQ服务。 * 然后通过以下命令运行本示例: <code>mvn exec:java -Dremote=true</code> * 如果ActiveMQ服务和本示例的不在同一台机器上运行,则需要在运行时指定ActiveMQ的brokerURL * <code>mvn exec:java -Dremote=true -Dbroker.url=tcp://192.168.1.99:61666</code> * * @param args */ public static void main(String[] args){ ClassPathXmlApplicationContext context; if("true".equalsIgnoreCase(System.getProperty("remote"))){ context = new ClassPathXmlApplicationContext("spring-jms-remote.xml"); }else{ context = new ClassPathXmlApplicationContext("spring-jms.xml"); } JmsTemplate producerTemplate = (JmsTemplate) context.getBean("producerTemplate"); JmsTemplate consumerTemplate = (JmsTemplate) context.getBean("consumerTemplate"); ReceiveRunnable receiveRunnable = new ReceiveRunnable(consumerTemplate); SendRunnable sendRunnable = new SendRunnable(producerTemplate); ExecutorService executorService = Executors.newFixedThreadPool(2); executorService.execute(receiveRunnable); executorService.execute(sendRunnable); while(true){ sendRunnable.send("Hello, 你好!" + System.currentTimeMillis()); try { Thread.sleep(1000L);//暂停1秒 } catch (InterruptedException e) { //ignore } } } }
最近下载更多
xb1406112453 LV5
2021年3月12日
tiansitong LV14
2020年7月5日
tonysam LV2
2019年12月3日
丶知北游丿 LV9
2019年8月23日
HCh1018 LV3
2019年8月21日
C544350851 LV26
2019年3月7日
meilisanya888 LV14
2018年4月21日
雨幕凌风 LV2
2018年4月2日
wwww1984 LV14
2018年3月2日
haiwen LV19
2017年11月16日
最近浏览更多
renyuan LV9
2023年4月27日
xb1406112453 LV5
2021年3月12日
wangdengzhe LV7
2020年11月30日
wjxiongw LV6
2020年8月10日
simple丶余心 LV21
2020年7月23日
tiansitong LV14
2020年7月5日
随便取个名字_哈哈 LV27
2020年6月4日
wjf123456111
2020年6月4日
暂无贡献等级
风间千月 LV13
2020年5月27日
sdulss LV8
2020年4月22日