我正在尝试对webjob SDK(https://github.com/Sarmaad/WebJobs.Extensions.RabbitMQ)使用rabbitMQ扩展,以便在将某些内容放入队列时触发它。
触发工作正常,但内容永远不会传递到我的函数中。
我下载了扩展程序的源代码,因此我可以在其中进行调试,并且我看到队列的内容已成功传递,并且扩展程序将其重新打包为TriggeredFunctionData对象。然后通过Webjob执行器将对象传递给我的函数。 但是当我进入我的函数时,这个对象是null。
扩展程序lib的监听器方法:
_consumer.Received += (sender, args) =>
{
var triggerValue = new RabbitQueueTriggerValue {MessageBytes = args.Body};
if (args.BasicProperties != null)
{
triggerValue.MessageId = args.BasicProperties.MessageId;
triggerValue.ApplicationId = args.BasicProperties.AppId;
triggerValue.ContentType = args.BasicProperties.ContentType;
triggerValue.CorrelationId = args.BasicProperties.CorrelationId;
triggerValue.Headers = args.BasicProperties.Headers;
}
var result = _executor.TryExecuteAsync(new TriggeredFunctionData{TriggerValue = triggerValue}, CancellationToken.None).Result;
调试时我可以看到Triggervalue包含我的消息数据。
我的功能正在执行:
public static async Task ProcessRabbitMqTopicStatusMessage([RabbitQueueTrigger("tempq")]
[RabbitQueueBinder("myexchange", "myroutingkey", "myerrorq",autoDelete:true,durable:true, execlusive:false)]
TriggeredFunctionData message,
TextWriter logger)
{
if (message != null)
{
}
}
此方法已成功触发,但消息始终为空。
有什么建议吗?
答案 0 :(得分:0)
您的用户功能不应该直接绑定到TriggeredFunctionData。这是触发基础设施使用的中间对象,它被转换为最终目标对象以匹配您的功能签名。
绑定作者(在本例中,您链接到的GitHub站点上的RabbitMQ)定义了它可以绑定的可能对象。
从http://www.sarmaad.com/2016/11/azure-webjobs-and-rabbitmq/开始,以下是其使用示例:
public void IntegrateApprovedProductToMarketPlace(
[RabbitQueueBinder("product", "product.approved", "error")]
[RabbitQueueTrigger("integration-product-approved")]
ProductApproved message, TextWriter log)
{
[handle message here]
}