ActiveMQ 项目实战

本文介绍了一个关于商品信息添加至数据库并同步至搜索索引库的过程,包括商品信息的创建、发送商品ID消息、接收消息后从数据库获取商品详情并将其添加到Solr索引库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

2.发送消息
     manager-server工程中发送消息: 当商品添加完成后发送一个TextMessage,包含一个商品id。
[java]  view plain  copy
  1. @Override  
  2.       public e3Result addItem(TbItem item, String desc) {  
  3.            // 1、生成商品id  
  4.            final long itemId = IDUtils.genItemId();  
  5.            // 2、补全TbItem对象的属性  
  6.            item.setId(itemId);  
  7.            //商品状态,1-正常,2-下架,3-删除  
  8.            item.setStatus((byte1);  
  9.            Date date = new Date();  
  10.            item.setCreated(date);  
  11.            item.setUpdated(date);  
  12.            // 3、向商品表插入数据  
  13.            itemMapper.insert(item);  
  14.            // 4、创建一个TbItemDesc对象  
  15.            TbItemDesc itemDesc = new TbItemDesc();  
  16.            // 5、补全TbItemDesc的属性  
  17.            itemDesc.setItemId(itemId);  
  18.            itemDesc.setItemDesc(desc);  
  19.            itemDesc.setCreated(date);  
  20.            itemDesc.setUpdated(date);  
  21.            // 6、向商品描述表插入数据  
  22.            itemDescMapper.insert(itemDesc);  
  23.            //发送一个商品添加消息  
  24.            jmsTemplate.send(topicDestination, new MessageCreator() {  
  25.                  @Override  
  26.                  public Message createMessage(Session session) throws JMSException {  
  27.                       TextMessage textMessage = session.createTextMessage(itemId + "");  
  28.                       return textMessage;  
  29.                  }  
  30.            });  
  31.            // 7、e3Result.ok()  
  32.            return e3Result.ok();  
  33.       }  
3.接收消息
(1) 功能分析:
      ① 接收消息。需要创建MessageListener接口的实现类。
      ② 取消息,取商品id。
      ③ 根据商品id查询数据库。
      ④ 创建一SolrInputDocument对象。
      ⑤ 使用SolrServer对象写入索引库。
      ⑥ 返回成功,返回e3Result。
(2) Dao层
     ① 根据商品id查询商品信息。

     ② 映射文件:
[html]  view plain  copy
  1. <select id="getItemById" parameterType="long" resultType="cn.e3mall.common.pojo.SearchItem">      
  2.          SELECT  
  3.                 a.id,  
  4.                 a.title,  
  5.                 a.sell_point,  
  6.                 a.price,  
  7.                 a.image,  
  8.                 b. NAME category_name,  
  9.                 c.item_desc  
  10.           FROM  
  11.                 tb_item a  
  12.           JOIN tb_item_cat b ON a.cid = b.id  
  13.           JOIN tb_item_desc c ON a.id = c.item_id  
  14.           WHERE a.status = 1  
  15.             AND a.id=#{itemId}  
  16. lt;/select>  
(3) Service层
     参数:商品ID
     业务逻辑:
     ① 根据商品id查询商品信息。
     ② 创建一SolrInputDocument对象。
     ③ 使用SolrServer对象写入索引库。
     ④ 返回成功,返回e3Result。
     返回值:e3Result
[java]  view plain  copy
  1. public e3Result addDocument(long itemId) throws Exception {  
  2.            // 1、根据商品id查询商品信息。  
  3.            SearchItem searchItem = searchItemMapper.getItemById(itemId);  
  4.            // 2、创建一SolrInputDocument对象。  
  5.            SolrInputDocument document = new SolrInputDocument();  
  6.            // 3、使用SolrServer对象写入索引库。  
  7.            document.addField("id", searchItem.getId());  
  8.            document.addField("item_title", searchItem.getTitle());  
  9.            document.addField("item_sell_point", searchItem.getSell_point());  
  10.            document.addField("item_price", searchItem.getPrice());  
  11.            document.addField("item_image", searchItem.getImage());  
  12.            document.addField("item_category_name", searchItem.getCategory_name());  
  13.            document.addField("item_desc", searchItem.getItem_desc());  
  14.            // 5、向索引库中添加文档。  
  15.            solrServer.add(document);  
  16.            solrServer.commit();  
  17.            // 4、返回成功,返回e3Result。  
  18.            return e3Result.ok();  
  19.       }  
(4) Listener
[java]  view plain  copy
  1. public class ItemChangeListener implements MessageListener {  
  2.   
  3.       @Autowired  
  4.       private SearchItemServiceImpl searchItemServiceImpl;  
  5.   
  6.       @Override  
  7.       public void onMessage(Message message) {  
  8.            try {  
  9.                  TextMessage textMessage = null;  
  10.                  Long itemId = null;  
  11.                  //取商品id  
  12.                  if (message instanceof TextMessage) {  
  13.                       textMessage = (TextMessage) message;  
  14.                       itemId = Long.parseLong(textMessage.getText());  
  15.                  }  
  16.                  //向索引库添加文档  
  17.                  searchItemServiceImpl.addDocument(itemId);  
  18.   
  19.            } catch (Exception e) {  
  20.                  e.printStackTrace();  
  21.            }  
  22.       }  
  23.   
  24. }  
(5) Spring配置监听
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值