商品删除-移除 Solr 索引库记录 5.1 需求分析通过消息中间件实现在商品删除时也同时移除索引库记录的功能。 5.2 消息生产者(运营商后台) 5.2.1 配置文件 修改 pinyougou-manager-web 工程的 spring-activemq.xml,添加 bean 配置 [AppleScript] 纯文本查看 复制代码 <!--这个是队列目的地,点对点-->
<bean id="queueSolrDeleteDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="pinyougou_queue_solr_delete"/>
</bean> 5.1.1 代码实现 修改 GoodsController.java [AppleScript] 纯文本查看 复制代码 @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 [AppleScript] 纯文本查看 复制代码 <!--这个是队列目的地,点对点的 文本信息 (删除索引库中记录) -->
<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 [AppleScript] 纯文本查看 复制代码 /**
*监听:用于删除索引库中记录
*@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();
}
}
}
|