易课寄在线购课系统开发笔记(二十四)--完成课程同步索引库相关功能
2020-06-05 06:07
417 查看
添加课程同步索引库
Producer
ecourses-bms-service 工程中发送消息。
当课程添加完成后发送一个 TextMessage,包含一个课程 id。
@Override public ECoursesResult addItem(EcoursesItem item, String desc) { //生成课程id final long itemId = IDUtils.genItemId(); //补全item的属性 item.setId(itemId); //1-正常,2-下架,3-删除 item.setStatus((byte) 1); item.setCreated(new Date()); item.setUpdated(new Date()); //向课程表插入数据 itemMapper.insert(item); //创建一个课程描述表对应的pojo对象。 EcoursesItemDesc itemDesc = new EcoursesItemDesc(); //补全属性 itemDesc.setItemId(itemId); itemDesc.setItemDesc(desc); itemDesc.setCreated(new Date()); itemDesc.setUpdated(new 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 ECoursesResult.ok(); }
Consumer
功能分析
1、接收消息,需要创建 MessageListener 接口的实现类;
2、取消息,取课程 id;
3、根据课程 id 查询数据库;
4、创建一个 SolrInputDocument 对象;
5、使用 SolrServer 对象写入索引库;
6、返回 ECoursesResult。
Dao 层
根据课程 id 查询课程信息。
映射文件:
<select id="getItemById" parameterType="long" resultType="cn.ecourses.common.pojo.SearchItem"> SELECT a.id, a.title, a.sell_point, a.price, a.image, b. NAME category_name FROM ecourses_item a LEFT JOIN ecourses_item_cat b ON a.cid = b.id WHERE a.`status` = 1 AND a.id=#{itemid} </select>
Service 层
参数:课程 id
业务逻辑:
1、根据课程 id 查询课程信息;
2、创建一个 SolrInputDocument 对象;
3、使用 SolrServer 对象写入索引库;
4、返回 ECoursesResult。
返回值:ECoursesResult
package cn.ecourses.search.service.impl; //索引库维护Service @Service public class SearchItemServiceImpl implements SearchItemService { @Autowired private ItemMapper itemMapper; @Autowired private SolrServer solrServer; @Override public ECoursesResult importAllItems() { try { //查询课程列表 List<SearchItem> itemList = itemMapper.getItemList(); //遍历课程列表 for (SearchItem searchItem : itemList) { //创建文档对象 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()); //把文档对象写入索引库 solrServer.add(document); } //提交 solrServer.commit(); //返回导入成功 return ECoursesResult.ok(); } catch (Exception e) { e.printStackTrace(); return ECoursesResult.build(500, "数据导入时发生异常"); } } }
Listener
package cn.ecourses.search.message; //监听添加消息,接收消息后,将对应的信息同步到索引库 public class ItemAddMessageListener implements MessageListener { @Autowired private ItemMapper itemMapper; @Autowired private SolrServer solrServer; @Override public void onMessage(Message message) { try { //从消息中取课程id TextMessage textMessage = (TextMessage) message; String text = textMessage.getText(); Long itemId = new Long(text); //等待事务提交 Thread.sleep(1000); //根据id查询课程信息 SearchItem searchItem = itemMapper.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()); //把文档写入索引库 solrServer.add(document); //提交 solrServer.commit(); } catch (Exception e) { e.printStackTrace(); } } }
Spring 配置监听
实现流程
相关文章推荐
- 易课寄在线购课系统开发笔记(二十五)--完成课程详情页面展示相关功能(应用Redis缓存)
- 易课寄在线购课系统开发笔记(二十八)--完成用户注册功能
- 易课寄在线购课系统开发笔记(二十九)--完成用户登录功能
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- Linux应用程序开发笔记->文件编程之系统调用方式相关函数
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能...
- 【裸机开发笔记】6410的系统时钟设置(中)---相关寄存器介绍
- 系统相关功能开发(八)-消息
- 本人开发系统--新生报到与数据统计管理系统--数据库设计及相关查询SQL语句笔记
- 安装完成ubuntu系统后的基本的相关配置---Linux总结笔记
- [课程设计]Scrum 2.8 多鱼点餐系统开发进度(下单一览页面-菜式一览功能的最终实现)
- Django 在线教育平台开发(六)模板继承与页面相关功能
- 【原创】SSH开发框架中,实现系统启动加载类,读取数据库常用数据进入内存,利用Spring托管,并完成reload功能
- Sundy嵌入式底层开发课程笔记5 --系统及其它
- Android2.3.3系统开发一个在线OTA功能下载文件功能
- 系统相关功能开发(二)-磁盘操作
- [课程设计]Scrum 2.7 多鱼点餐系统开发进度(下单一览页面-菜式添加功能的继续实现)
- 系统相关功能开发(十)-鼠标键盘
- [课程设计]Scrum 2.6 多鱼点餐系统开发进度(下单一览页面-菜式添加功能实现)
- iOS开发学习笔记:使用xcode里的单元测试,放在STAssert…里面的语句无法使用自动完成功能