1.添加商品同步到索引库

2.发送消息
manager-server工程中发送消息:
当商品添加完成后发送一个TextMessage,包含一个商品id。
- @Override
- public e3Result addItem(TbItem item, String desc) {
-
- final long itemId = IDUtils.genItemId();
-
- item.setId(itemId);
-
- item.setStatus((byte) 1);
- Date date = new Date();
- item.setCreated(date);
- item.setUpdated(date);
-
- itemMapper.insert(item);
-
- TbItemDesc itemDesc = new TbItemDesc();
-
- itemDesc.setItemId(itemId);
- itemDesc.setItemDesc(desc);
- itemDesc.setCreated(date);
- itemDesc.setUpdated(date);
-
- itemDescMapper.insert(itemDesc);
-
- jmsTemplate.send(topicDestination, new MessageCreator() {
- @Override
- public Message createMessage(Session session) throws JMSException {
- TextMessage textMessage = session.createTextMessage(itemId + "");
- return textMessage;
- }
- });
-
- 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 {
-
- SearchItem searchItem = searchItemMapper.getItemById(itemId);
-
- SolrInputDocument document = new SolrInputDocument();
-
- 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());
-
- solrServer.add(document);
- solrServer.commit();
-
- return e3Result.ok();
- }
(4) Listener
- public class ItemChangeListener implements MessageListener {
-
- @Autowired
- private SearchItemServiceImpl searchItemServiceImpl;
-
- @Override
- public void onMessage(Message message) {
- try {
- TextMessage textMessage = null;
- Long itemId = null;
-
- if (message instanceof TextMessage) {
- textMessage = (TextMessage) message;
- itemId = Long.parseLong(textMessage.getText());
- }
-
- searchItemServiceImpl.addDocument(itemId);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- }
(5) Spring配置监听