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

2.发送消息
manager-server工程中发送消息:当商品添加完成后发送一个TextMessage,包含一个商品id。
-
@Override
-
public e3Result addItem(TbItem item, String desc) {
-
// 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);
-
//发送一个商品添加消息
-
jmsTemplate.send(topicDestination, new MessageCreator() {
-
@Override
-
public Message createMessage(Session session) throws JMSException {
-
TextMessage textMessage = 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;
-
-
@Override
-
public void onMessage(Message message) {
-
try {
-
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配置监听
相关文章:
-
2022-01-20
-
2021-06-17
-
2022-01-20
-
2022-12-23
-
2022-12-23
-
2021-11-30