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

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

目录
相关文章
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
98 3
|
4月前
|
SQL JSON 大数据
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
这篇文章是Elasticsearch的进阶使用指南,涵盖了Search API的两种检索方式、Query DSL的基本语法和多种查询示例,包括全文检索、短语匹配、多字段匹配、复合查询、结果过滤、聚合操作以及Mapping的概念和操作,还讨论了Elasticsearch 7.x和8.x版本中type概念的变更和数据迁移的方法。
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
|
4月前
|
存储 监控 负载均衡
检索服务elasticsearch分布式结构
【8月更文挑战第22天】
54 3
|
9天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
44 11
|
3月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
104 6
面试官:项目中如何实现分布式锁?
|
3月前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
109 3
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
这篇文章讲述了作者因为一个检索问题而学习了ElasticSearch技术,并分享了排查和解决ElasticSearch检索结果与页面展示不符的过程。
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
|
4月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
6月前
|
消息中间件 传感器 Cloud Native
事件驱动作为分布式异步服务架构
【6月更文挑战第25天】本文介绍事件驱动架构(EDA)是异步分布式设计的关键模式,适用于高扩展性需求。EDA提升服务韧性,支持CQRS、数据通知、开放式接口和事件流处理。然而,其脆弱性包括组件控制、数据交换、逻辑关系复杂性、潜在死循环和高并发挑战。EDA在云原生环境,如Serverless,中尤其适用。
221 2
事件驱动作为分布式异步服务架构
|
4月前
|
Java 应用服务中间件 数据库
SpringCloud:服务保护和分布式事务详解
SpringCloud:服务保护和分布式事务详解
138 0