Spring整合JMS基于ActiveMQ

分类:软件编程
阅读:449
作者:majingjing
发布:2017-08-19 10:31

任何一个牛逼的框架都能和spring完美的集成.现在各个公司的项目基本没有不用spring框架的. 这里还是有必要把jms的流程图再回顾一下

image.png

  1. 创建一个基于maven管理的web项目
  2. 在项目中引入spring4 和 activemq 的依赖
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jms</artifactId>
	<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.apache.activemq</groupId>
	<artifactId>activemq-all</artifactId>
	<version>5.11.0</version>
</dependency>
  1. 关于spring和spring-mvc的配置这里不做过多解释
  2. 配置连接工厂
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
	<property name="brokerURL" value="failover:(tcp://localhost:61616)" />
</bean>
  1. 配置生产者
<!-- 定义消息队列(Queue) -->
<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
	<!-- 设置消息队列的名字 -->
	<constructor-arg>
		<value>queue-tm-jms-demo</value>
	</constructor-arg>
</bean>

<!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
	<property name="connectionFactory" ref="connectionFactory" />
	<property name="defaultDestination" ref="queueDestination" />
	<property name="receiveTimeout" value="10000" />
</bean>

<!--queue消息生产者 -->
<bean id="producerService" class="cn.majingjing.tm.demo.jms.queue.ProducerServiceImpl">
	<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
  1. 编写生产者代码
/**
 * 向指定队列发送消息
 */
public void sendMessage(Destination destination, final String msg) {
	System.out.println("ProducerService向队列" + destination.toString()
			+ "发送了消息:\t" + msg);
	jmsTemplate.send(destination, new MessageCreator() {
		public Message createMessage(Session session) throws JMSException {
			return session.createTextMessage(msg);
		}
	});
}
  1. 编写控制器调用程序
@Controller
public class JmsController {

	@Autowired
	private ProducerService producerService;

	@RequestMapping("/queue/{msg}")
	@ResponseBody
	public Object queue(@PathVariable("msg") String msg, Model model) {
		producerService.sendMessage(msg);
		return "ok";
	}
	
}
	
  1. 启动项目,在浏览器中执行 http://localhost:8060/queue/世界你好
  2. 在浏览器中访问 http://localhost:8161 看 Queues 模块下已经有对应的 Destination 名称为 queue-tm-jms-demo
  3. 生产者的集成已经完成