(2)EII消息总线(EII Message Bus)发布和订阅数据实操

1. EII Message Bus简介

本文详细介绍了EII Message Bus原理以及实操案例。

实操本文案例前,用户须安装好EII 3.0,并跑通了EII自带的PCBA缺陷检测案例和温度监控案例。EII的下载与安装,请参考上一篇文章:英特尔工业边缘洞见平台(EII)安装指南

1.1 ZeroMQ简介

EII的架构图如下,EII Message Bus作为EII的消息中间件,可支持EII各个模块之间的通讯,同时也能支持EII模块与外部程序的数据交换。
请添加图片描述

EII Message Bus是基于ZeroMQ开发的,并且EII模块中对于EII Message Bus的很多配置选项都和ZeroMQ的性质相关,所以我们有必要先介绍一下ZeroMQ。

ZeroMQ (官网: https://zeromq.org/) 是一个开源的通用消息库,它提供类似于socket编程的API基于不同的网络协议实现多种通讯模式。例如,使用ZeroMQ同一套API可以实现进程内(in-process),进程间(IPC),以及跨网络的通讯(TCP/multicast),另外ZeroMQ支持Request-Reply,Pub-Sub,Pull-Push等通讯模式。

ZeroMQ名字里虽然有MQ (Message Queue),但是它本质上并不是一个消息队列,而是一个消息内核 (Message Library)。所以,它和RabbitMQ, RocketMQ, Kafka等产品还是有一些区别的。ZeroMQ作为一个非常轻量化的消息内核,提供去中心化的,低延迟的通讯,可以很方便地集成在不同的系统中。

EII Message Bus对ZeroMQ的Request-Reply和Pub-Sub这两种通讯方式进行了封装,我们这里重点介绍一下。

首先是Request-Reply模式,该模式类似于传统Server-Client模式,即由Client(Request)端先发出请求,Server(Reply)端收到请求进行回复,属于一问一答式的通讯。
在这里插入图片描述

Pub-Sub模式,即发布-订阅模式,这种模式在很多通讯协议中都有被使用到(如MQTT)。它主要用于1对多的通讯场景中。当一个发布者发布消息后,可以有多个订阅者订阅消息,同时一个订阅者也可以订阅多个发布者的消息。
在这里插入图片描述

1.2 配置EII Message Bus

接下来我们介绍,在EII功能模块中,如何配置EII Message Bus的通讯接口呢?我们以EII自带的PCBA缺陷检测案例为例进行介绍。

在PCBA缺陷检测案例中,由VideoIngestion模块进行图像的采集,然后数据传递给VideoAnalytics模块进行分析,分析结果最后传递给Visualizer模块进行显示。
在这里插入图片描述

  • 首先,我们介绍VideoIngestion模块的发布接口,该接口用于VideoIngestion模块采集到图像数据后,将数据发布出去。查看VideoIngestion模块的配置文件"VideoIngestion/config.json",在"interfaces"字段中找到"Publishers"的定义,具体如下:
"Publishers": [
   {
   
        "Name": "default",
        "Type": "zmq_ipc",
        "EndPoint": "/EII/sockets",
        "Topics": [
            "camera1_stream"
        ],
        "AllowedClients": [
            "VideoAnalytics", "Visualizer", "WebVisualizer", "TLSRemoteAgent", "RestDataExport"
        ]
    }
]

字段具体含义如下:
- “Name"字段可任意填写。
- “Type"字段为"zmq_ipc”,表示采用ZeroMQ的进程间(IPC)的通讯方式。
- “EndPoint"字段为”/EII/sockets”,表示存放通讯媒介socket文件的存放地址。
- “Topics"字段为"camera1_stream”。Pub-Sub模式一般都是通过主题(topic)名字来实现消息的订阅。
- "AllowedClients"字段是一个简单的安全保护,只有这里定义的模块,才有权限订阅VideoIngestion模块发布的数据。

  • 接着,来看VideoAnalytics模块的订阅接口,该接口用于从VideoIngestion订阅数据。查看VideoAnalytics模块的配置文件"VideoAnalytics/config.json",在"interfaces"字段中找到"Subscribers"的定义,具体如下:
"Subscribers": [
   {
   
        "Name": "default",
        "Type": "zmq_ipc",
        "EndPoint": "/EII/sockets",
        "PublisherAppName": "VideoIngestion",
        "Topics": [
            "camera1_stream"
        ],
        "zmq_recv_hwm": 50
    }
],

可以看到VideoAnalytics模块的Subscriber接口定义和VideoIngestion模块的Publisher接口定义是对应的。
- “Name"字段可任意填写。
- “Type"字段为"zmq_ipc”。与VideoIngestion模块的Publisher接口保持一致。
- “EndPoint"字段为”/EII/sockets”。与VideoIngestion模块的Publisher接口保持一致。
- “Topics"字段为"camera1_stream”。与VideoIngestion模块的Publisher接口保持一致。
- "PublisherAppName"字段填写VideoIngestion模块的名字,该名字的定义可以去文件"VideoIngestion/docker-compose.yml"中,"environment"字段下的"AppName"变量查看。
- "zmq_recv_hwm"字段是ZeroMQ的一个设置选项,指的是通过ZeroMQ收发的消息,在内存中排队队列的长度大小。

  • 接着,来看VideoAnalytics模块的发布接口,VideoAnalytics模块从VideoIngestion模块接收数据,然后在模块内部进行分析处理,处理结果再经由发布接口发布出去。仍然是在配置文件"VideoAnalytics/config.json",在"interfaces"字段中找到"Publishers"的定义,具体如下:
"Publishers": [
    {
   
        "Name": "default",
        "Type": "zmq_tcp",
        "EndPoint": "0.0.0.0:65013",
        "Topics": [
            "camera1_stream_results"
        ],
        "AllowedClients": [
            "*"
        ]
    }
]

相比于VideoIngestion的发布接口,这里有的些许不同,我们来具体看一下:
- “Name"字段仍然可以任意填写。
- “Type"字段为"zmq_tcp”。这里和VideoIngestion模块就不一样了,VideoIngestion定义的是"zmq_ipc”,表示采用ZeroMQ的进程间(IPC)的通讯方式,这种方式只能实现同一台机器上进程之间的通讯。而VideoAnalytics这里定义的是"zmq_tcp",表示采用的是ZeroMQ的TCP通讯方式,可以实现跨机器,跨网络的通讯。VideoAnalytics模块的发布接口采用TCP方式的好处是,可以支持远端的机器远程查看处理结果。
- “EndPoint"字段为"0.0.0.0:65013”。由于这里采用了"zmq_tcp"的通讯方式,所以"EndPoint"需要配置成TCP通讯时,需要用到的IP地址 + 端口号Port的形式。
- “Topics"字段为"camera1_stream_results”,用于发布处理结果。
- “AllowedClients"字段是”*"。表示任意模块,都可以订阅VideoAnalytics模块发布的处理结果。

  • 最后,我们来看看Visualizer模块的订阅接口。到这里,大家应该比较清楚了,Visualizer模块是从VideoAnalytics模块订阅处理结果来进行可视化,所以它的订阅接口的定义需要和VideoAnalytics模块的发布模块对应。
"Subscribers": [
    {
   
        "Name": "default",
        "Type": "zmq_tcp",
        "EndPoint": "ia_video_analytics:65013",
        "PublisherAppName": "VideoAnalytics",
        "Topics": [
            "camera1_stream_results"
        ]
    },
    {
   
        "Name": "default",
        "Type": "zmq_tcp",
        "EndPoint": "ia_python_safety_gear_analytics:65019",
        "PublisherAppName": "PySafetyGearAnalytics",
        "Topics": [
            "py_safety_gear_stream_results"
        ]
    },
    {
   </
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值