当流程运行到中间消息节点时,引擎内部将会调用消息服务,将消息主题进行发布。一旦消息发布进入消息队列,订阅事件的接口将会被调用,进行业务应用的功能处理。

在订单泳道流程中,当流程流转到NewOrderThrowingMessage节点时候,将会发起消息发布的操作,消息进入消息队列,此时,订阅事件中的接口处理就是调用启动流程的引擎api接口处理。

///<summary>

/// 消息发布

///</summary>

///<param name="topic">主题</param>

///<param name="line">内容</param>

publicvoid Publish(string topic, string line)

        {

var channel = MQClientFactory.CreatePublishChannel();

            channel.QueueDeclare(queue: topic,

                                     durable: false,

                                     exclusive: false,

                                     autoDelete: false,

                                     arguments: null);

var body = Encoding.UTF8.GetBytes(line);

            channel.BasicPublish(exchange: "",

                                 routingKey: topic,

                                 basicProperties: null,

                                 body: body);

        }

消息订阅时,提前绑定事件激活接口(此处为消息启动流程的引擎api接口):


///<summary>

/// 订阅消息

///</summary>

///<returns></returns>

        [HttpPost]

public ResponseResult Subscribe([FromBody] MessageEntity message)

        {

var result = ResponseResult.Default();

try

            {

 Func<MessageEntity, MessageConsumedResult> func = (new MessageDelegateService()).ConsumeMessage;

var mqService = MessageQueueServiceFactory.Create(func);

                mqService.Subscribe(message.Topic);


                result = ResponseResult.Success();

            }

catch (System.Exception ex)

            {

                result = ResponseResult.Error(

string.Format("An error occurred when subscribing message topic!{0}", ex.Message)

                );

            }

return result;

        }