activemq spring+maven

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Smy_0114/article/details/81779365

现在apache官网下载个activemq启起来,教程百度一大堆。

maven项目需在web.xml中加载activemq配置文件。

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-context*.xml</param-value>
  </context-param>

pom.xml文件下载jar包。

	<dependency>
     		<groupId>org.apache.activemq</groupId>
      		<artifactId>activemq-spring</artifactId>
      		<version>5.15.4</version>
    	</dependency>
	<dependency>
	      	<groupId>org.springframework</groupId>
	      	<artifactId>spring-jms</artifactId>
	      	<version>4.3.5.RELEASE</version>
	</dependency>

activemq配置文件名:spring-context-activemq.xml。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:jms="http://www.springframework.org/schema/jms"
	xmlns:amq="http://activemq.apache.org/schema/core"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/mvc
		http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
		http://www.springframework.org/schema/jms
		http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
		http://activemq.apache.org/schema/core
		http://activemq.apache.org/schema/core/activemq-core-5.15.4.xsd"
		default-lazy-init="true">
    <!-- 消息生产者者 start--> 
    <amq:connectionFactory id="jmsConnectionFactory" brokerURL="tcp://localhost:61616"
     userName="admin" password="admin" />
    <bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <bean class="org.springframework.jms.connection.CachingConnectionFactory ">
                <property name="targetConnectionFactory" ref="jmsConnectionFactory" />
                <property name="sessionCacheSize" value="100" />
            </bean>
        </property>
    </bean>
    
    <bean id="sendTopic" class="com.jeeplus.modules.activemq.entity.SendTopic">
        <property name="template" ref="myJmsTemplate" />
        <property name="destination" value="viki_sense" />
        <property name="node" value="viki_sense" />
        <property name="allNodeStr" value="x,x,x" />
    </bean>
    <!-- 消息生产者者 end--> 
    
    <!-- 消息消费者 start--> 
    
    <!-- 监听节点  -->
    <amq:queue name="viki_sense" physicalName="viki_sense" />

    <!-- 消息接收 -->
    <bean id="receiveMessageService" 
    	class="com.jeeplus.modules.activemq.server.ReceiveMessageService">
        <property name="destName"><value>viki_sense</value></property>
    </bean>

    <!-- 订阅 -->
    <bean id="senseTopicMessageListener" 
    	class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <constructor-arg ref="receiveMessageService" />
    </bean>

    <!-- 消息监听 TOPIC 模式-->
    <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsConnectionFactory" />
        <property name="destination" ref="viki_sense" />
        <property name="messageListener" ref="senseTopicMessageListener" />
    </bean>
    
    
    <!-- 消息消费者 end--> 
</beans>

老套路三层结构controller:ActiveMqController.java



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.jeeplus.modules.activemq.entity.SendTopic;

@Controller
@RequestMapping(value = "${adminPath}/topic_Send")
public class ActiveMqController {
	@Autowired SendTopic sendTopic;
    @RequestMapping("/topicSend")
    @ResponseBody
    public String topicSend(String message){
        String result = "success";
        sendTopic.sendNode("viki_sense");
        return result;
    }
}

ReceiveMessageService.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jeeplus.core.service.CrudService;
import com.jeeplus.modules.activemq.entity.XjserivesStateEntity;
import com.jeeplus.modules.activemq.entity.XjsubserviceStateEntity;
import com.jeeplus.modules.activemq.mapper.ReceiveMessageMapper;
@Service
@Transactional(readOnly = true)
public class ReceiveMessageService extends CrudService<ReceiveMessageMapper, XjserivesStateEntity> implements MessageListener {
	private String destName;

    public void setDestName(String destName) {
        this.destName = destName;
    }

    public void onMessage(Message message) {
        // TODO Auto-generated method stub
    	TextMessage textMessage = (TextMessage) message;
        try {
        	System.out.println(destName);
        	System.out.println(textMessage.getText());
		} catch (Exception e) {
			e.printStackTrace();
		}
    }

SendTopic.java

import org.springframework.jms.core.JmsTemplate;
public class SendTopic {
	private JmsTemplate template;
    
    private String destination;

    private  String node;

    private String allNodeStr;

    
    public void sendNode(String message){
        
        template.convertAndSend(node,message);
    }
    
    public void sendAllNodes(String message){
        
        for(String node:allNodeStr.split(",")){
            
            template.convertAndSend(node,message);
        }
        
    }

    public JmsTemplate getTemplate() {
        return template;
    }

    public void setTemplate(JmsTemplate template) {
        this.template = template;
    }

    public String getDestination() {
        return destination;
    }

    public void setDestination(String destination) {
        this.destination = destination;
    }

    public String getNode() {
        return node;
    }

    public void setNode(String node) {
        this.node = node;
    }

    public String getAllNodeStr() {
        return allNodeStr;
    }

    public void setAllNodeStr(String allNodeStr) {
        this.allNodeStr = allNodeStr;
    }

}

完了。

测试:在浏览器里输入你项目的地址加controller上面的链接直接会返回在界面上。

猜你喜欢

转载自blog.csdn.net/Smy_0114/article/details/81779365