spring boot 融入activeMQ

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("  消息 发送完毕   ");          }   }

相关文章
相关标签/搜索