首先写一个发布者acticemq-sender.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 这是注解扫描 -->
<context:annotation-config></context:annotation-config>
<!-- 这是配置连接activemq的连接工厂 -->
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://127.0.0.1:61616</value>
</property>
</bean>
</property>
<property name="maxConnections" value="100"></property>
</bean>
<!--使用缓存可以提升效率 -->
<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="jmsFactory" />
<property name="sessionCacheSize" value="1" />
</bean>
<!-- 创建一个jmsTemplate 对象-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="cachingConnectionFactory" />
<property name="messageConverter">
<bean class="org.springframework.jms.support.converter.SimpleMessageConverter" />
</property>
</bean>
<!-- 这是对activemq 的队列(queue)配置bean-->
<bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg name="name" value="HELLOQUEUE" />
</bean>
<!--Topic主题配置bean -->
<bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0" value="spring-topic" />
</bean>
<!-- 这是将你的发布者所对应的类生成一个bean -->
<!--(com.easyit.activemq.ActiveMQService)这个是你发布者对应的类-->
<bean id="activeMqService" class="com.easyit.activemq.ActiveMQService"></bean>
</beans>
下面是发布者对应的java类
package com.easyit.activemq;
import javax.jms.Destination;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import com.easyit.tools.CodeTools;
public class ActiveMQService {
//这里就是将对象交给bean进行管理(注入)
@Autowired
JmsTemplate jmsTemplate;
@Autowired
//这里是使用queue(队列)
@Qualifier("destinationQueue")
Destination destination;
public void send(String message) {
//这里是将数据通过测试类进行输入
jmsTemplate.send(destination,(session)->{
return session.createTextMessage(message);
});
//这个是你发布消息的标题
String name = "名称";
jmsTemplate.send(name, (session)->{
//发布的内容
return session.createTextMessage("内容");
});
}
}
下面是消费者active-listener.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://127.0.0.1:61616</value>
</property>
</bean>
</property>
<property name="maxConnections" value="100"></property>
</bean>
<!--使用缓存可以提升效率-->
<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="jmsFactory"/>
<property name="sessionCacheSize" value="1"/>
</bean>
<!--测试Queue,队列的名字是spring-queue-->
<bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="HELLOQUEUE"/>
</bean>
<!--测试Topic-->
<bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0" value="spring-topic"/>
</bean>
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="cachingConnectionFactory"/>
<property name="destination" ref="destinationQueue"/>
<property name="messageListener" ref="messageListener"/>
</bean>
<!--消息监听器所对应的类-->
<bean id="messageListener" class="com.easyit.activemq.ActiveMQListener"></bean>
</beans>
消费者对应的类
package com.easyit.activemq;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.apache.log4j.Logger;
//这里一定要实现MessageListener(函数式接口)
//函数式接口就是接口里面只有一个方法
public class ActiveMQListener implements MessageListener{
private final static Logger log = Logger.getLogger(ActiveMQListener.class);
public ActiveMQListener() {}
@Override
public void onMessage(Message message) {
try {
log.debug("接收消息为:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
这上面的类记得不需要运行,接下来就是能运行的测试类
发布者测试类
package com.easyit.testactivemq;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.easyit.activemq.ActiveMQService;
public class TestActiveMQService {
public static void main(String[] args) {
//加载配置xml文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("activemq-sender.xml");
//这里是从配置的xml里面拿到对应的bean
ActiveMQService activeMQService = (ActiveMQService) context.getBean("activeMqService");
//循环发送消息
for(int i=0;i<10100;i++) {
activeMQService.send("hello world:"+i);
}
}
}
消费测试类
package com.easyit.testactivemq;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestActiveMQListener {
@Test
public void testActiveMQListener() {
//得到xml文件,然后启动,等待发布者发布消息,有消息就消费
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("activemq-listener.xml");
context.start();
}
}
记得 要运行activemq的服务器
运行就可以看到效果了
还可以通过浏览器访问127.0.0.1:8161/admin
然后输入账号admin,密码admin进行查看