ActiveMQ是apache旗下的一个消息队列,可以实现项目与项目之间的消息通讯,可以有效的降低项目之间的耦合性,支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.25.128:61616"/>
</bean>
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<!--这个是队列目的地,点对点的 文本信息-->
<bean id="queueNumDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="sms"/>
</bean>
<!--<!–这个是订阅模式 文本信息–>-->
<bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic"> -->
<!--<constructor-arg value="topic_text"/>
<!--</bean> -->
</beans>
下面就是一个Active的点对点的基本操作
MAVEN项目的发送
package com.jms.user.service.impl;
import com.pinyougou.user.interfice.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import javax.jms.*;
/**
* 服务实现层
*
* @author Administrator
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination queueNumDestination;
@Autowired
private RedisTemplate redisTemplate;
@Override
public void createSmsCode(final String num) {
jmsTemplate.send(queueNumDestination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
MapMessage message = session.createMapMessage();
String s="";
Intege num = 12;
redisTemplate.boundHashOps("num").put(num,s);
message.setString("num",num);
message.setString("s",s);
return message;
}
});
}
}
SpringBoot项目的监听
package cn.jms.sms.util;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class ActiceMqLister {
@JmsListener(destination = "sms")
public void onMessage(Map<String,String> map) {
System.out.println(map.get("num")+map.get("s"));
}
}