商品删除-移除 Solr 索引库记录 5.1 需求分析 通过消息中间件实现在商品删除时也同时移除索引库记录的功能。 5.2 消息生产者(运营商后台) 5.2.1 配置文件 修改 pinyougou-manager-web 工程的 spring-activemq.xml,添加 bean 配置


<!--这个是队列目的地,点对点-->
 
<bean  id="queueSolrDeleteDestination" class="org.apache.activemq.command.ActiveMQQueue">
 
<constructor-arg  value="pinyougou_queue_solr_delete"/>
 
</bean>
5.1.1 代码实现
修改 GoodsController.java

@Autowired
 
private  Destination  queueSolrDeleteDestination;//用户在索引库中删除记录
 
 
 
 
/**
 
*批量删除
 
*@param  ids
 
 
*@return
 
 
*/ @RequestMapping("/delete")
public  Result  delete(final  Long  []  ids){
 
 
try {
 
 
goodsService.delete(ids); jmsTemplate.send(queueSolrDeleteDestination,  new  MessageCreator()  {
@Override
 
 
public  Message  createMessage(Session  session)  throws  JMSException  {
 
 
return  session.createObjectMessage(ids);
 
 
}
 
 
});
 
return  new  Result(true,  "删除成功");
}  catch  (Exception  e)  { e.printStackTrace();
return  new  Result(false,  "删除失败");
 
}
 
 
}
5.1 消息消费者(搜索服务)
5.1.1 配置文件
修改 pinyougou-search-service 的 applicationContext-activemq-consumer.xml

<!--这个是队列目的地,点对点的 文本信息 (删除索引库中记录) -->
 
<bean  id="queueSolrDeleteDestination" class="org.apache.activemq.command.ActiveMQQueue">
 
<constructor-arg  value="pinyougou_queue_solr_delete"/>
 
 
</bean>
 
<!-- 消息监听容器(删除索引库中记录) -->
 
<bean  class="org.springframework.jms.listener.DefaultMessageListenerContainer">
 
 
<property  name="connectionFactory"  ref="connectionFactory"  />
 
 
<property  name="destination"  ref="queueSolrDeleteDestination"  />
 
 
<property  name="messageListener"  ref="itemDeleteListener"  />
 
 
</bean>
5.1.1 代码实现
com.pinyougou.search.service.impl 包下创建监听类 ItemDeleteListener

/**
 
*监听:用于删除索引库中记录
 
*@author  Administrator
*
 
 
*/ @Component
public  class  ItemDeleteListener  implements  MessageListener{
 
 
 
 
@Autowired
 
 
private  ItemSearchService  itemSearchService;
 
 
 
 
@Override
 
 
public  void  onMessage(Message  message)  {
 
 
try {
 
 
ObjectMessage  objectMessage=  (ObjectMessage)message; Long[]    goodsIds  =  (Long[])  objectMessage.getObject();
System.out.println("ItemDeleteListener 监听接收到消息..."+goodsIds);
itemSearchService.deleteByGoodsIds(Arrays.asList(goodsIds)); System.out.println("成功删除索引库中的记录");
 
}  catch  (Exception  e)  { e.printStackTrace();
}
 
 
}
 
 
 
 
}