消息主题发布
当流程运行到中间消息节点时,引擎内部将会调用消息服务,将消息主题进行发布。一旦消息发布进入消息队列,订阅事件的接口将会被调用,进行业务应用的功能处理。
在订单泳道流程中,当流程流转到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;
}