本文使用的是intellij idea工具。
下面主要介绍一个简单的activeMQ的demo。
本文主要是spring风格的实现。
先来看下包结构:
demo包含一个生产者,一个消费者,一个包含main方法的ActiveMaDemo类执行程序,还有一个自定义的类MyMessage作为消息传递的类型。所有的bean配置都放在beans.xml。
各个类的代码如下:
1 public class Producer { 2 private JmsTemplate template; 3 private Destination destination; 4 5 public void produce(MyMessage message){ 6 template.convertAndSend(destination, message); 7 } 8 9 public JmsTemplate getTemplate() { 10 return template; 11 } 12 13 public void setTemplate(JmsTemplate template) { 14 this.template = template; 15 } 16 17 public Destination getDestination() { 18 return destination; 19 } 20 21 public void setDestination(Destination destination) { 22 this.destination = destination; 23 } 24 }
1 public class Consumer { 2 private int num; 3 4 public void consume(MyMessage message) { 5 System.out.println(num+"号消费"+message); 6 } 7 8 public int getNum() { 9 return num; 10 } 11 12 public void setNum(int num) { 13 this.num = num; 14 } 15 }
1 public class MyMessage implements Serializable { 2 private static final long serialVersionUID = -4360789240260037588L; 3 4 private String text; 5 6 public String getText() { 7 return text; 8 } 9 10 public void setText(String text) { 11 this.text = text; 12 } 13 14 public String toString(){ 15 return text; 16 } 17 }
1 import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; 2 import org.springframework.context.ApplicationContext; 3 4 public class ActiveMqDemo { 5 6 public static void main(String[] args){ 7 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); 8 Producer producer = (Producer) context.getBean("producer"); 9 for(int i=0;i<10;i++){ 10 MyMessage myMessage = new MyMessage(); 11 System.out.println("生产第"+i+"条消息!"); 12 myMessage.setText("第"+i+"条消息!"); 13 producer.produce(myMessage); 14 } 15 } 16 }
pom需要的依赖如下:
org.apache.activemq activemq-all 5.14.5
接下来看下配置文件
1 23 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://activemq.apache.org/schema/core 7 http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd"> 8 9 10 11 12 13 14 15 class="org.apache.activemq.ActiveMQConnectionFactory"> 16 25 26 27 28 29 3017 18 19 20 2421
23demo 22class="org.apache.activemq.command.ActiveMQQueue"> 31 35 36 3732 34queue 33class="org.springframework.jms.core.JmsTemplate"> 38 40 41 4239 class="demo.Producer"> 43 46 47 4844 45 class="demo.Consumer"> 49 51 52 5350 class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> 54 57 58 5955 56 class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 60 6461 62 63
其中 jmsConnectionFactory 的 trustedPackages 属性用来把我自定义的MyMessage添加到白名单,因为ActiveMQ不认识这个类型~, 同时,在自定义传递消息的类时要注意实现序列化,不然会报错。
接下来运行 ActiveMqDemo 的main函数就行了,结果如下:
同时,打开http://localhost:8161/admin/queues.jsp,我们也可以看到ActiveMQ的消息产生和消费情况。
完!