进程通讯MQ设计

发布时间 2023-12-28 10:21:59作者: JianMing

系统进程通讯MQ设计

4.4通讯层

4.4.1 系统进程通讯

选用NetMQ消息队列用于主进程与影像进程之间的通讯,如下图所示:

 

 

 

  1. 系统 Main主进程
  2. 系统 Image 影像进程
  3. NetMQ,轻量级消息库ZeroMQ的一种。

 

主进程与影像进程消息交互如下图:系统 Main主窗体负责接收系统 Image发过来的消息,同理系统 Image 主窗体负责接收系统 Main发过来的消息

 

 

4.4.2 MQ通讯服务
  1. 消息发布服务

 

IPublisherService包含2个接口

发布消息接口: void Publish(string topicName, string data)

Input 1: string topicName 发布主题,订阅者可根据主题订阅

Input 2: string data 发布数据,Json序列化后的值,参考4.4.3数据格式定义

 

设置发布端口接口: void SetBindPoint(string? endpoint);

Input : string? endpoint NetMQ发布IP和端口

 

  1. 消息订阅服务

 

 

ISubscriberService包含4个接口

订阅接口1void RegisterSubscriber(List<string> topics, string? endPoint)

Input 1: List<string> topics 订阅主题列表

Input 2: string? endPoint NetMQ订阅IP和端口

 

订阅所有消息接口2:void RegisterSubscriberAll(string endPoint)

Input : string? endPoint NetMQ订阅IP和端口

 

取消订阅接口:void RemoveSubscriberAll()

 

订阅处理事件:event Action<string, string> Notify

 

4.4.3 MQ数据包格式

发布主题(TopicName):  enum TopicsNetMQ

对应2个枚举值 ToImageProcess, ToMain

 

 

数据包如下图所示:包含2个字段,即包头+数据负载

 

MQPackData 对象

command命令,对应如下:

 

 

 

object? data 数据负载,根据包头的command对应实体类型,使用Json进行序列化和反序列化

一个command对应一个实体类型

ToMain Data

 

 

ToImageProcess Data:

 

4.4.4 MQ消息类型说明

1. ToImageProcess消息说明

 

TopicName

Code

data[]对应实体

说明

ToImageProcess

MQCommand.EnterTreatState

EnterTreatStateData

ToImageProcess

MQCommand.ChangeImageScreen

ChangeImageScreenData

进入扫描窗体

ToImageProcess

MQCommand.LoadPlanPara

LoadPlanParaData

加载CT扫描协议

ToImageProcess

MQCommand.CloseImageScreen

CloseImageScreenData

关闭影像进程

ToImageProcess

MQCommand.ChangeImageScreen

ChangeImageScreenData

进入主窗体

ToImageProcess

MQCommand.BeginCTScanGo

BeginCTScanGoData

准备CT扫描

ToImageProcess

MQCommand.CTMode

CTModeData

进入/退出CT模式

 

 

 

AbortScan

 

 

 

EndStudy

 

 

 

QA模块

 

 

 

Serivce模块

 

 

 

 

 

 

 

2. ToMain消息说明

 

TopicName

Code

data[]对应实体

说明

ToMain

MQCommand.CTScanEnd

CTScanEndData

CT扫描完成

ToMain

MQCommand.CTReconEnd

CTReconEndData

CT ReconEnd

ToMain

MQCommand.CT_ERROR

CT_ERRORData

CT 扫描错误

ToMain

MQCommand.PrepareCTScanGo

PrepareCTScanGoData

扫描参数设置完成准备扫描

ToMain

MQCommand.ApplayImageReg

ApplayImageRegData

图像配准完成