我有以下代码将消息发送到总线:
var queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
var message = new Message(poco.SerializeToBytes());
await queueClient.SendAsync(message);
但他们似乎直接进入了死记信息:
我还创建了一个Azure函数,它将选择消息:
[FunctionName("ServiceBusFunction")]
public static void Run([ServiceBusTrigger("schedule", AccessRights.Listen, Connection = "ServiceBusConnection")]byte[] myQueueItem, TraceWriter log)
{
log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
当我关闭此功能时,在创建此功能之前,消息将进入ACTIVE MESSAGE COUNT。我已尝试在本地运行该函数,但该函数未被命中。我觉得我在从函数中获取总线上的消息方面缺少一些基本的东西吗?
答案 0 :(得分:5)
如果您转到功能应用日志,您可能会看到
等错误异常绑定参数' myQueueItem'。 Microsoft.Azure.WebJobs.ServiceBus:BrokeredMessage with ContentType' null'无法使用以下消息反序列化为byte []:'反序列化System.Byte []类型的对象时出错。输入源格式不正确。'。 System.Runtime.Serialization:反序列化System.Byte []类型的对象时出错。输入源格式不正确。 System.Runtime.Serialization:输入源格式不正确。 2018-03-01T15:14:41.578
功能应用尝试处理您的消息10次(默认),然后使用
将其放入DLQ10次传递尝试后无法使用消息。
问题与你从"新的"发送消息这一事实有关。 .NET标准服务总线客户端,而功能应用程序v1正在使用"旧的"基于BrokeredMessage
的客户端。它们在二进制级别上不兼容,请参阅this issue。
在功能应用程序v2包括服务总线绑定准备就绪之前,您应该最好使用旧的Service Bus客户端发送消息。如果您必须使用新客户端,请参阅上面链接的问题中的一些解决方法,例如: this comment