ActiveMQ学习笔记(2)-整合Spring

目录

使用前先引入相关jar包

一、spring的配置文件

1、配置连接运行activemq的服务器,并且让spring管理

2、配置spring框架提供的JmsTemplate对象,用以操作activemq

3、配置队列形式的消息目的地,点对点

二、编写测试队列消息的代码

1、发送消息(队列模式)

2、接受消息(队列模式)

1)实现MessageListener接口,用以获取内容

2)在spring配置文件中注册该接口

3、测试代码

三、使用发布订阅模式完成索引库的同步:

1、spring配置文件同上,多配置一个发布订阅模式的destination

2、添加商品后,使用发布订阅模式将商品的id发布到activemq中

3、新建一个消息监听器,接受消息的同时通过id查询数据库获得商品数据,存储到索引库中

4、配置监听器


上一篇介绍历史ActiveMQ的作用和基础使用,但是在使用时发现过程十分多,而且没有和spring整合,不够实用,所以这篇讲的是ActiveMQ和spring整合使用,并且附上项目中使用的代码


使用前先引入相关jar包

                
			org.springframework
			spring-jms
		
		
			org.springframework
			spring-context-support
		

 

一、spring的配置文件

1、配置连接运行activemq的服务器,并且让spring管理


	
		
	
	
	
		
		
	

2、配置spring框架提供的JmsTemplate对象,用以操作activemq


	
		
		
	

3、配置队列形式的消息目的地,点对点


	
		
			spring-queue
		
	

二、编写测试队列消息的代码

1、发送消息(队列模式)

@Test
	public void testSpringActiveMq() throws Exception {
		//初始化spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
		//从spring容器中获得JmsTemplate对象
		JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class);
		//从spring容器中取Destination对象
		Destination destination = (Destination) applicationContext.getBean("queueDestination");
		//使用JmsTemplate对象发送消息。
		jmsTemplate.send(destination, new MessageCreator() {
			
			@Override
			public Message createMessage(Session session) throws JMSException {
				//创建一个消息对象并返回
				TextMessage textMessage = session.createTextMessage("spring activemq queue message");
				return textMessage;
			}
		});
	}

2、接受消息(队列模式)

1)实现MessageListener接口,用以获取内容

public class MyMessageListener implements MessageListener {

	@Override
	public void onMessage(Message message) {
		
		try {
			TextMessage textMessage = (TextMessage) message;
			//取消息内容
			String text = textMessage.getText();
			System.out.println(text);
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

}

2)在spring配置文件中注册该接口


	
	
	
	
		
		
		
	

3、测试代码

@Test
	public void testQueueConsumer() throws Exception {
		//初始化spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
		//等待
		System.in.read();
	}

 

三、使用发布订阅模式完成索引库的同步:

1、spring配置文件同上,多配置一个发布订阅模式的destination


	
		
	

2、添加商品后,使用发布订阅模式将商品的id发布到activemq中


        @Autowired
	private JmsTemplate jmsTemplate;
	@Resource
	private Destination topicDestination;

//....

/**
	 * 保存商品及其描述
	 */
	@Override
	public void saveItem(TbItem item, String desc) {
		//补全TbItem属性
		Long itemId = IDUtils.genItemId();//商品id
		item.setId(itemId);
		item.setCreated(new Date());	//商品创建时间
		item.setUpdated(new Date());	//商品更新时间
		item.setStatus((byte)1);		//商品状态,1-正常,2-下架,3-删除
		//插入tb_item表
		tbItemMapper.insert(item);
		
		//补全TbItemDesc属性
		TbItemDesc tbItemDesc = new TbItemDesc();
		tbItemDesc.setItemId(itemId);//商品id
		tbItemDesc.setCreated(new Date());//商品描述创建时间
		tbItemDesc.setUpdated(new Date());//商品描述更新时间
		tbItemDesc.setItemDesc(desc);//商品描述
		//插入 tb_item_desc表
		tbItemDescMapper.insert(tbItemDesc);
		
		//通过activemq发送商品id,让接收端同步到solr索引库中
		jmsTemplate.send(topicDestination, new MessageCreator() {
			//发送消息
			@Override
			public Message createMessage(Session session) throws JMSException {
				TextMessage message = session.createTextMessage(itemId.toString());
				return message;
			}
		});
		}

//....

3、新建一个消息监听器,接受消息的同时通过id查询数据库获得商品数据,存储到索引库中

**
 * 
 * @author 阿荣
 * @Description:商品添加后,接受activemq中的商品id并查询出该商品相关信息,再添加到索引库
 * @date: 2018年8月29日 下午6:17:08
 */
public class ItemAddMessageListener implements MessageListener {
	@Autowired
	private HttpSolrServer httpSolrServer;
	
	
	@Autowired
	private TbItemSolrMapper tbItemSolrMapper;

	@Override
	public void onMessage(Message message) {
		TextMessage textMessage = (TextMessage) message;
		//获取商品id
		try {
			String ItemId = textMessage.getText();
			System.out.println(ItemId);
			//睡眠1s钟,等事务完全执行完后才能查询到商品
			Thread.sleep(1000);
			//从数据库中查询该商品并添加到索引库
			TbItemSolrResult result = tbItemSolrMapper.selectTbItemSolrResult(Long.parseLong(ItemId));
			 SolrInputDocument document = new SolrInputDocument();
			document.addField("id",result.getId());
			document.addField("item_title", result.getTitle());
			document.addField("item_sell_point", result.getSell_point());
			document.addField("item_price", result.getPrice());
			document.addField("item_image", result.getImage());
			document.addField("item_category_name", result.getCategory_name());
			//提交每个document
			httpSolrServer.add(document);
			//提交索引文档
			httpSolrServer.commit();
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (SolrServerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

4、配置监听器

	
	
	
	
		
		
		
	

 

 

你可能感兴趣的:(-----【ActiveMQ】,Java技术学习笔记)