博客
关于我
Liferay7 BPM门户开发之21: 理解消息总线(Message Bus)体系
阅读量:788 次
发布时间:2023-01-31

本文共 2675 字,大约阅读时间需要 8 分钟。

Liferay Message Bus是一种基于松耦合设计的消息发送和接收机制,适用于本地服务,且支持集群环境。它主要通过生产者-消费者模式工作,能够实现插件之间的通信、事件传递以及异步流程处理等多种场景。

主要用途

  • 插件间通信:通过Message Bus进行信息交互,例如在某个插件完成某项任务后,触发另一个插件的逻辑。
  • 事件索引传递:在事件处理过程中,传递相关实例索引,确保数据的一致性。
  • 系统通知:在工作流或其他流程中发送通知邮件或系统消息,例如用户任务到达提醒。
  • 定时任务通知:在定时任务启动时,向相关人员发送提醒,确保任务按时执行。
  • 异步流程处理:允许在不阻塞当前线程的情况下执行任务,提升系统性能和响应速度。

组件结构

Message Bus系统主要由以下关键组件组成:

  • Message Bus:负责管理消息的发送和接收逻辑。
  • Destinations:用于注册消息接收地址,可以想象为邮件地址或XMPP中的接收JID。
  • Listeners:消息的接收者,通常实现MessageListener接口进行处理。
  • Senders:消息的发送者,可以是任何需要发送消息的服务或插件。

各个服务既可以作为发送者,也可以作为接收者,具备双重职能。这种灵活性使得系统能够根据实际需求灵活配置消息路由。

消息类型

Message Bus支持两种消息类型:

  • 同步消息:基于线程阻塞的类型,发送者必须等待消息处理完成,不支持异步 Submission。适用于对消息处理结果有即时响应需求的场景。
  • 异步消息:采用Send-and-Forget机制,无需等待回复,适合不需要确认机制的小量数据传输。消息可以以JSON格式携带更多元数据,便于接收端处理。

配置文件

在Liferay环境中,消息 Bus 的配置文件主要分为两种:

  • messaging-spring.xml:配置包括消息队列、消息监听器以及消息路由映射等核心设置。
  • web.xml:将 messaging-spring.xml 加入到响应源中,确保Spring上下文能够解析相关配置。
  • Example: 安装座椅任务

    以ури会议室设备安装任务为例,Portlet应用中涉及两种角色:

  • Task Portlet:负责发起安装任务。
  • Setup Portlet:负责执行安装。
  • 通过同步消息实现任务通知:

    • Task Portlet 在新建任务时,通过Message Bus发送消息至 "tour/roadie/setup" 累加站。
      @Overridepublic void updateTask(Task task) throws TaskCreationException {    // 需要创建Message对象并填充任务相关信息    Message message = MessageBusUtil.createMessage("tour/roadie/setup");    message.put("name", task.getName());    message.put("description", task.getDescription());    // 设置响应信息    message.setResponseId("TASK_" + task.getId());    message.setResponseDestinationName("tour/manager/task");    try {        String setupResponse = MessageBusUtil.sendSynchronousMessage(task.getDestination(), message, 10000);        task.setState(STATE_RECEIVED);    } catch (MessageBusException e) {        log.error("Failed to send message to Setup", e);    }}
    - **Setup Portlet** 在收到消息后,创建响应消息并发送回给Task Portlet。  ```java  @Service(Provides = "javax.portlet.event.SerializableEvent")  public class SetupMessagingImpl implements MessageListener {            @Override      public void receive(Message message) {          String name = (String) message.get("name");          // 构建响应消息          Message response = MessageBusUtil.createResponseMessage(message);          response.setPayload("INSTALLATION_COMPLETED");                    //发送响应消息          MessageBusUtil.sendMessage("tour/manager/task", response);      }  }

    Summary

    通过上述配置和实现,能够在Liferay环境中实现插件间高效的消息通信。两种消息类型的灵活结合,保障了系统在不同场景下的高效处理能力。此外,基于Spring的配置方式使得系统集成性强,易于扩展和维护。

    转载地址:http://kzwfk.baihongyu.com/

    你可能感兴趣的文章
    Linux API的fork()测试
    查看>>
    linux awk命令详解
    查看>>
    linux awk命令详解2
    查看>>
    linux awk应用详解
    查看>>
    linux bash shell 特殊字符大全
    查看>>
    Linux Bash 脚本中的 IFS 是什么?
    查看>>
    linux bash: sqlplus: command not found 错误处理
    查看>>
    linux bash中too many arguments问题的解决方法
    查看>>
    Linux BASH多进程并行处理的方法实现
    查看>>
    linux bg和fg命令
    查看>>
    Linux Bridge KVM虚拟化环境部署
    查看>>
    Linux Bridge(网桥)
    查看>>
    linux build编译,rpmbuild 编译
    查看>>
    linux C 中的volatile使用【转】
    查看>>
    linux c 正则
    查看>>
    Linux C/C++ 学习路线(已拿腾讯、百度 offer)
    查看>>
    Linux cat 命令的进化版:Bat 0.25 正式发布,行压缩功能亮点十足!
    查看>>
    linux centos tomcat8配置apr模式
    查看>>
    linux centos 安装 docker-compose 1.27.4
    查看>>
    linux centos6.4 php连接sql server2008
    查看>>