编辑推荐: |
本文主要介绍了ActiveMQ 项目实战:添加商品同步到索引库、发送消息、接收消息等相关内容。 来自于csdn,,由火龙果软件Anna编辑、推荐。 |
1.添加商品同步到索引库
2.发送消息
manager-server工程中发送消息:当商品添加完成后发送一个TextMessage,包含一个商品id。
@Override public e3Result addItem (TbItemitem,Stringdesc){ //1、生成商品id final long itemId= IDUtils.genItemId(); //2、补全TbItem对象的属性 item.setId(itemId); //商品状态,1-正常,2-下架,3-删除 item.setStatus((byte)1); Date date = new Date(); item.setCreated(date); item.setUpdated(date); //3、向商品表插入数据 itemMapper.insert(item); //4、创建一个TbItemDesc对象 TbItemDesc itemDesc= new TbItemDesc(); //5、补全TbItemDesc的属性 itemDesc.setItemId(itemId); itemDesc.setItemDesc(desc); itemDesc.setCreated(date); itemDesc.setUpdated(date); //6、向商品描述表插入数据 itemDescMapper.insert(itemDesc); //发送一个商品添加消息 imsTemplate.send (topicDestination, new MessageCreator(){ @Override public Message createMessage (Session session) throws JMSException { TextMessagetextMessage = session.createTextMessage (itemId +""); return textMessage; } }); //7、e3Result.ok() return e3Result.ok(); }
3.接收消息
(1) 功能分析:
① 接收消息。需要创建MessageListener接口的实现类。
② 取消息,取商品id。
③ 根据商品id查询数据库。
④ 创建一SolrInputDocument对象。
⑤ 使用SolrServer对象写入索引库。
⑥ 返回成功,返回e3Result。
(2) Dao层
① 根据商品id查询商品信息。
② 映射文件:
<select id= "getItemById" parameterType="long" resultType="cn.e3mall.common.pojo.SearchItem"> SELECT a.id, a.title, a.sell_point, a.price, a.image, b.NAME category_name, c.item_desc FROM tb_item a JOIN tb_item_cat b ON a.cid = b.id JOIN tb_item_desc c ON a.id=c.item_id WHERE a.status =1 AND a.id=#{itemId} lt;/select>
(3) Service层
参数:商品ID
业务逻辑:
① 根据商品id查询商品信息。
② 创建一SolrInputDocument对象。
③ 使用SolrServer对象写入索引库。
④ 返回成功,返回e3Result。
返回值:e3Result
public e3Result addDocument(long itemId) throws Exception {
// 1、根据商品id查询商品信息。
SearchItem searchItem = searchItemMapper.getItemById(itemId);
// 2、创建一SolrInputDocument对象。
SolrInputDocument document = new SolrInputDocument();
// 3、使用SolrServer对象写入索引库。
document.addField ("id", searchItem.getId());
document.addField ("item_title", searchItem.getTitle());
document.addField ("item_sell_point", searchItem.getSell_point());
document.addField ("item_price", searchItem.getPrice());
document.addField ("item_image", searchItem.getImage());
document.addField ("item_category_name", searchItem.getCategory_name());
document.addField ("item_desc", searchItem.getItem_desc());
// 5、向索引库中添加文档。
solrServer.add(document);
solrServer.commit();
// 4、返回成功,返回e3Result。
return e3Result.ok();
}
(4) Listener
public class ItemChangeListener implements MessageListener {
@Autowired
private SearchItemServiceImpl searchItemServiceImpl;
public void onMessage (Message message) {
TextMessage textMessage = null;
Long itemId = null;
//取商品id
if (message instanceof TextMessage) { textMessage = (TextMessage) message; itemId = Long. parseLong(textMessage.getText());
}
//向索引库添加文档
searchItemServiceImpl.addDocument(itemId);
} catch(Exception e){
e.printStackTrace();
}
}
}
(5) Spring配置监听