1、activeMQ:html
1.下载:http://activemq.apache.org/download.htmlweb
2.解压文件,在bin/win64(若是你的电脑是32位的,打开win32文件夹),双击activemq.bat,启动activeMQ服务器spring
2、建立spring boot项目:apache
一、项目名称jms_activeMQ_demojson
二、pom.xml:服务器
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<artifactId>jms_activeMQ_demo</artifactId>
<packaging>war</packaging>
<dependencies>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency> <!-- json格式化 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- activemq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
<version>2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>
</project>app
三、application.properties文件:dom
# Tomcat
server.port=8761
server.servlet-path=/maven
###REDIS
####### #######################
# database name
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.in-memory=true
#若是此处设置为true,须要加activemq-pool依赖包,不然会自动配置失败,报JmsMessagingTemplate注入失败
spring.activemq.pool.enabled=false
#配置消息模型为pub/sub方式,在application.properties添加以下配置信息
#这里简单对这个配置说明下:若是为True,则是Topic;若是是false或者默认,则是queue
spring.jms.pub-sub-domain=truetcp
4.生产者开发:
/**
*
* @author 卫江波
* @2018年1月4日上午11:11:30
*/
@Service
public class Producer {
//也能够注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装
@Autowired
private JmsMessagingTemplate jmsTemplate;
public void sendMessage(Destination destination, final String message){
jmsTemplate.convertAndSend(destination, message);
}
//接收通道名为out.queue的信息
@JmsListener(destination = "out.queue")
public void receiveQueue(String text) {
System.out.println("i am product ,i recevice return :"+text);
}
}
5.接受者开发:
/**
* 接收消息 示例代码
*
* @author 卫江波
* @2018年1月3日上午11:14:19
*/
@Component
public class Consumer {
/**接收消息的方法*/
//@JmsListener(destination = "mytest.queue")
@JmsListener(destination = "mytest.topic")
@SendTo("out.queue") //该注解的意思是将return回的值,再发送的"out.queue"队列中
public String receiveMessage1(String message){
System.out.println(" I am consumer1,i receive message:" + message);
if(!StringUtils.isEmpty(message)){
JSONObject msg = JSONObject.fromObject(message);
System.out.println("I am consumer1,i receive result:"+msg.getString("result"));
}
return "return de context1";
}
/**接收消息的方法*/
//@JmsListener(destination = "mytest.queue")
@JmsListener(destination = "mytest.topic")
@SendTo("out.queue") //该注解的意思是将return回的值,再发送的"out.queue"队列中
public String receiveMessage2(String message){
System.out.println(" I am consumer2,i receive message:" + message);
if(!StringUtils.isEmpty(message)){
JSONObject msg = JSONObject.fromObject(message);
System.out.println("I am consumer2,i receive result:"+msg.getString("result"));
}
return "return de context2";
}
}
6.测试类编写:
/** * 点对点:消息生产者生产消息发布到queue中,而后消息消费者从queue中取出,而且消费消息。这里须要注意:消息被消费者消费之后,queue中再也不有存储, * 因此消息消费者不可消费到已经被消费的消息。Queue支持存在多个消息消费者,可是对一个消息而言,只会有一个消费者能够消费。 * 发布/订阅:消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不一样,发布到topic的消息会被全部订阅者消费。 * @author 卫江波 * @2018年1月4日上午11:20:39 */ @RunWith(SpringRunner.class) @SpringBootTest public class SpringBootJmsTest { @Autowired private Producer producer; @Test public void contextLoads() throws InterruptedException { // 组装数据 JSONObject data = new JSONObject(); data.put("result", "本地测试,activeMQ"); //JMS规范两种经常使用的消息模型:点对点(point to point ,queue)和发布/订阅(publish/subscribe,topic)。 //Destination queue = new ActiveMQQueue("mytest.queue"); Destination topic = new ActiveMQTopic("mytest.topic"); // 推送消息 //producer.sendMessage(queue, data.toString()); producer.sendMessage(topic, data.toString()); System.out.println(" 消息 发送完毕 "); } }