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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 56分布式电商项目 - ActiveMQ 实现运营商后台与搜索服务的零耦合(一)

运用消息中间件ActiveMQ实现运营商后台与搜索服务的零耦合。运营商执行商品审后,向 ActiveMQ 发送消息(SKU 列表),搜索服务从 ActiveMQ 接收到消息并导入到 solr 索引库。

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

1)pinyougou-manager-web 的 pom.xml,引入依赖:

<dependency> 
  <groupId>org.apache.activemq</groupId> 
  <artifactId>activemq-client</artifactId> 
  <version>5.13.4</version>
</dependency>

2)pinyougou-sellergoods-service 工程添加 spring-activemq.xml内容如下:

3)代码实现:

@Autowired
private Destination queueSolrDestination;//用于发送 solr 导入的消息
@Autowired
private JmsTemplate jmsTemplate;
@RequestMapping("/updateStatus")
public Result updateStatus(Long[] ids,String status){
  try {
    goodsService.updateStatus(ids, status);
    //按照 SPU ID 查询 SKU 列表(状态为 1)
    if(status.equals("1")){
    //审核通过List<TbItem> 
    itemList = goodsService.findItemListByGoodsIdandStatus(ids, status);//调用搜索接口实现数据批量导入
    if(itemList.size()>0){
    final String jsonString = JSON.toJSONString(itemList);
    jmsTemplate.send(queueSolrDestination, new MessageCreator() {
    @Override
    public Message createMessage(Session session) throws JMSException {
    return session.createTextMessage(jsonString);
    }
    });
    }else{
    System.out.println("没有明细数据");
    }
     }return new Result(true, "修改状态成功"); 
     } catch (Exception e) {
     e.printStackTrace();return new Result(false, "修改状态失败");
     }
      }

消息消费者(搜索服务)

1)修改 pinyougou-search-service ,在 pom.xml 中添加 activemq 依赖

<dependency> 
  <groupId>org.apache.activemq</groupId> 
  <artifactId>activemq-client</artifactId> 
  <version>5.13.4</version>
</dependency>

2)添加 spring 配置文件 applicationContext-jms-consumer.xml

<!-- 真正可以产生 Connection 的 ConnectionFactory,由对应的 JMS 服务厂商提供--> 
<bean id="targetConnectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory"> 
  <property name="brokerURL" value="tcp://192.168.25.135:61616"/>
</bean>
<!-- Spring 用于管理真正的 ConnectionFactory 的 ConnectionFactory -->
 <bean id="connectionFactory"class="org.springframework.jms.connection.SingleConnectionFactory">
    <property name="targetConnectionFactory" ref="targetConnectionFactory"/>
  </bean>
  <!--这个是队列目的地,点对点的 文本信息--> 
  <bean id="queueSolrDestination"class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg value="pinyougou_queue_solr"/>
  </bean>
<!-- 消息监听容器 --> 
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="queueSolrDestination" />    <property name="messageListener" ref="itemSearchListener" /
   </bean>

3) 代码实现

@Component
public class ItemSearchListener implements MessageListener{
@Autowired
private ItemSearchService itemSearchService;
@Override
public void onMessage(Message message) {
  System.out.println("监听接收到消息...");
  try {
      TextMessage textMessage=(TextMessage)message;
      String text = textMessage.getText();
      List<TbItem> list = JSON.parseArray(text,TbItem.class);
      for(TbItem item:list){
      System.out.println(item.getId()+" "+item.getTitle());
      Map specMap= JSON.parseObject(item.getSpec());//将 spec 字段中的 json
      字符串转换为 map
      item.setSpecMap(specMap);//给带注解的字段赋值
    }
    itemSearchService.importList(list);//导入
    System.out.println("成功导入到索引库");
  } catch (Exception e) {
    e.printStackTrace();
  } 
} 
}


目录
相关文章
|
9月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 9.1.5 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.1.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
591 0
|
10月前
|
JSON 监控 Java
Elasticsearch 分布式搜索与分析引擎技术详解与实践指南
本文档全面介绍 Elasticsearch 分布式搜索与分析引擎的核心概念、架构设计和实践应用。作为基于 Lucene 的分布式搜索引擎,Elasticsearch 提供了近实时的搜索能力、强大的数据分析功能和可扩展的分布式架构。本文将深入探讨其索引机制、查询 DSL、集群管理、性能优化以及与各种应用场景的集成,帮助开发者构建高性能的搜索和分析系统。
624 0
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
671 3
|
消息中间件 人工智能 监控
文生图架构设计原来如此简单之分布式服务
想象一下,当成千上万的用户同时要求AI画图,如何公平高效地处理这些请求?文生图/图生图大模型的架构设计看似复杂,实则遵循简单而有效的原则:合理排队、分工明确、防患未然。
587 14
文生图架构设计原来如此简单之分布式服务
|
存储 安全 Linux
Elasticsearch Enterprise 9.0 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.0 (macOS, Linux, Windows) - 分布式搜索和分析引擎
538 0
|
存储 Linux iOS开发
Elasticsearch Enterprise 8.18 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 8.18 (macOS, Linux, Windows) - 分布式搜索和分析引擎
469 0
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
791 18
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
519 16
|
SQL 分布式计算 DataWorks
MaxCompute MaxFrame评测 | 分布式Python计算服务MaxFrame(完整操作版)
在当今数字化迅猛发展的时代,数据信息的保存与分析对企业决策至关重要。MaxCompute MaxFrame是阿里云自研的分布式计算框架,支持Python编程接口、兼容Pandas接口并自动进行分布式计算。通过MaxCompute的海量计算资源,企业可以进行大规模数据处理、可视化数据分析及科学计算等任务。本文将详细介绍如何开通MaxCompute和DataWorks服务,并使用MaxFrame进行数据操作。包括创建项目、绑定数据源、编写PyODPS 3节点代码以及执行SQL查询等内容。最后,针对使用过程中遇到的问题提出反馈建议,帮助用户更好地理解和使用MaxFrame。
|
SQL 分布式计算 数据处理
云产品评测|分布式Python计算服务MaxFrame | 在本地环境中使用MaxFrame + 基于MaxFrame实现大语言模型数据处理
本文基于官方文档,介绍了由浅入深的两个部分实操测试,包括在本地环境中使用MaxFrame & 基于MaxFrame实现大语言模型数据处理,对步骤有详细说明。体验下来对MaxCompute的感受是很不错的,值得尝试并使用!
417 1

热门文章

最新文章