57分布式电商项目 - ActiveMQ 实现运营商后台与搜索服务的零耦合(二)

简介: 57分布式电商项目 - ActiveMQ 实现运营商后台与搜索服务的零耦合(二)

现在需要通过ActiveMQ消息中间件实现在商品删除时也同时移除索引库记录的功能。

消息生产者(运营商后台)

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>

2) 代码实现,修改 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, "删除失败");
      } 
  }

消息消费者(搜索服务)

1 )配置文件

修改 pinyougou-search-service 的 applicationContext-activemq-consumer.xml

2)代码实现

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();
     } 
   } 
 }

其它增删改查模式都大同小异,再次不在重复赘述。

目录
相关文章
|
19天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
32 2
|
3月前
|
监控 负载均衡 Dubbo
|
2月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
187 0
|
4月前
|
Dubbo Java 应用服务中间件
Spring Boot Dubbo 构建分布式服务
Spring Boot Dubbo 构建分布式服务
49 0
|
4月前
|
分布式计算 Ubuntu Hadoop
百度搜索:蓝易云【Ubuntu搭建全分布式Hadoop】
请注意,以上只是概述,并不包含详细的步骤和指令。搭建全分布式Hadoop是一个复杂的过程,需要对Hadoop的架构和配置有深入的理解,并熟悉Linux系统管理。建议在搭建全分布式Hadoop之前,先学习相关知识并查阅官方文档和教程,以确保正确搭建和配置Hadoop集群。
27 0
|
4月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
尽管经过了上一篇文章 《【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现》有了低延迟的优化保障,消息引擎仍需精心规划其容量。为了提供无与伦比的流畅体验,消息引擎必须实施有效的容量管理策略。
53 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
|
3月前
|
消息中间件 存储 负载均衡
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可胜。故曰:胜可知,而不可为。
84 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
|
2月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
170 0
|
3月前
|
存储 Oracle 关系型数据库
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
46 0
|
5天前
使用JWT的服务分布式部署之后报错:JWT Check Failure:
使用JWT的服务分布式部署之后报错:JWT Check Failure:
16 1