标签: azureservicebus

Azure Function ServiceBusReceivedMessage ApplicatonProperties 为空

我正在创建一个作为 ServiceBus 触发器的 Azure 函数。

        [FunctionName("RetryRack")]
    public async Task Run([ServiceBusTrigger("%RackIntegration:topic%", "%RackIntegration:subscription%")] ServiceBusReceivedMessage sbMessage, ILogger log, MessageReceiver messageReceiver)
Run Code Online (Sandbox Code Playgroud)

我正在使用 Azure.Messaging.ServiceBus (7.6.0)。

当我使用同一库中的 ServiceBusMessage 发送消息时,我在消息中发送了几个自定义属性。我可以在 SB Explorer 中看到这些自定义属性,因此我知道它们设置正确。

SB 浏览器图像

现在,当我在函数中收到消息时,ApplicationProperties 为空。

观察名单

谁能帮我弄清楚为什么当我知道从 SB Explorer 中正确设置了自定义属性时,当我收到消息时自定义属性没有被填充?

仅供参考,我在发送消息时设置了这样的属性。

message.ApplicationProperties.Add("@message.event","eventName");
Run Code Online (Sandbox Code Playgroud)

这是我用来发送消息的方法

        public async Task SendMessage<T>(T messageObject)
    {
        ServiceBusMessage message = new ServiceBusMessage(JsonConvert.SerializeObject(messageObject));
        message.ApplicationProperties.Add(MessageProperties.Event, "RackIntegration");
        message.ApplicationProperties.Add(MessageProperties.Plant, "CNW");

        try
        {
            await sender.SendMessageAsync(message);
        }
        finally
        {
            await sender.DisposeAsync();
            await client.DisposeAsync();
        }

    }
Run Code Online (Sandbox Code Playgroud)

一旦服务总线触发器收到消息,我就会尝试获取这样的自定义属性

string prop1 = receivedMessage.ApplicationProperties[MessageProperties.Event].toString();
Run Code Online (Sandbox Code Playgroud)

正如我在上面的屏幕打印中所示,当函数触发器检索消息时,ApplicationProperties 集合为空。

我编写了一个小型控制台应用程序来使用 ServiceBusProcessor 手动接收消息。当我这样做时,ApplicationProperties 已正确填充。

所以看来这是 Function ServiceBus 触发器的问题......也许?

c# azureservicebus azure-functions

4
推荐指数
1
解决办法
6396
查看次数

无法将REST API用于Windows Server 1.1(内部部署)的Service Bus

我正在使用Window Server Service Bus 1.1。我可以使用以下基地址从Window Server Service Bus生成OAuth令牌

  string baseAddressHttp = "https://" + ServerName + ":9355/" + Namespace + "/$STS/OAuth/"; 
Run Code Online (Sandbox Code Playgroud)

对于用于将消息发送到队列的Window Azure Service Bus,我可以在以下队列地址上发布请求

        string serviceNamespace = "ServiceBusDefaultNamespace";
        string queueName = "SampleQueuName";
        string message ="This is my first message";
        string queueAddress = "https://" + serviceNamespace + ".servicebus.windows.net/"+ queueName + "/messages";
        WebClient webClient = new WebClient();
        webClient.Headers[HttpRequestHeader.Authorization] = token;
        webClient.UploadData(baseAddress, "POST", Encoding.UTF8.GetBytes(message));
Run Code Online (Sandbox Code Playgroud)

但是对于窗口服务器服务总线,什么相同的技术不起作用。

Window Server Service Bus 1.1是否支持REST API?任何帮助将不胜感激。

提前致谢!!

c# rest servicebus azure azureservicebus

3
推荐指数
1
解决办法
2847
查看次数

Azure Service Bus:通过带有内置重试策略的消息泵收到的瞬态错误(例外).为什么?

我一直在阅读2013年4月推出的事件驱动消息编程模型,OnMessageOptions.ExceptionReceived 事件,内置RetryPolicy(2013年5月,RetryPolicy.Default),瞬态故障处理应用程序块(2011)已过时等等(见下).

我一直在监视通过消息泵收到的异常错误,我每天都会收到MessagingCommunicationExceptions.此文章(更新日期:2014年9月16日),提出以下建议:

此异常表示当无法成功建立从消息传递客户端到Service Bus基础结构的连接时可能出现的通信错误.在大多数情况下,如果存在网络连接,则可以将此错误视为瞬态错误.客户端可以尝试重试导致此类异常的操作.还建议您验证域名解析服务(DNS)是否可操作,因为此错误可能表示无法解析目标主机名.

我的理解是,在版本2.1(2013)之后,没有额外的代码可用于处理服务总线上的瞬态错误.除非我的前提是错误的,为什么我每天都会收到瞬态错误?是否应忽略通过消息泵收到的异常?如果忽略,我只能假设意外的异常也会被忽略..我当然不希望这种情况发生.

Microsoft.ServiceBus的版本是2.4.0.0

同样感兴趣:从1.x的升级Windows Azure的服务总线2.0 -重试政策,介绍了Windows Azure的服务总线事件驱动的消息编程模型,是什么在Azure的SDK 2.0版本(2013年4月)的新功能,什么是新Service Bus 2.1版本(2013年5月),瞬态故障处理.

queue message-queue azure azureservicebus retrypolicy

3
推荐指数
1
解决办法
2273
查看次数

尽管WebJobs SDK处理程序成功完成,但Service Bus消息已被放弃

我已使用WebJobs SDK将长时间运行的进程实现为WebJob.期待长时间运行的过程,因为我想要结果.

public async Task ProcessMessage([ServiceBusTrigger("queuename")] MyMessage message)
{
    await Run(message.SomeProperty); // takes several minutes
    // I want to do something with the result here later..
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是为什么消息有时会被放弃,这当然会再次触发处理程序.我试图调试(本地),在ProcessMessage完成之前设置断点,我可以看到它似乎成功完成.

WebJobs SDK的Sevice Bus部分负责消息锁更新,因此就我所理解的而言,这应该不是问题.

我错过了什么以及如何排除故障?

c# azureservicebus azure-webjobs azure-webjobssdk

3
推荐指数
1
解决办法
676
查看次数

如何在没有旧的Azure门户的情况下获取到现有Servicebus的连接字符串

由于公司的限制,我无法使用旧的Azure门户。但是我有一个在项目中使用ServiceBus的要求。我可以使用创建服务总线ns resource.azure.com,但是找不到找到该服务总线名称空间的连接字符串的方法。我尝试使用天蓝色的电源外壳,但是它也需要访问旧的天蓝色的门户……在此先感谢。

servicebus azure azureservicebus azure-servicebus-queues

3
推荐指数
4
解决办法
3535
查看次数

MassTransit在Azure Service Bus之上提供什么?

我正在尝试确定是否需要在Azure Service Bus上使用MassTransit或直接使用ASB.我不打算使用saga或中间件等高级功能,但需要一个支持命令和pub/sub样式消息传递的简单ESB.

有关选择运输的MassTransit文档仍在开发中.看看ASB文档,似乎Azure提供的不仅仅是传输.

我没有使用其他ESB的经验,所以我不确定我需要什么功能.

我正在寻找一些关于为什么我应该使用其中一个的指导.更具体一点:MassTransit仅提供ASB所必需的功能(如果有的话)?

masstransit azureservicebus

3
推荐指数
1
解决办法
672
查看次数

Azure函数输出服务总线绑定从计时器触发器

我正在运行Visual Studio 2017 Preview并在本地运行功能代码,我正在使用开箱即用的Azure Function项目模板.我正在尝试使用定时器触发的Azure功能使用输出绑定将消息发送到服务总线队列,但看起来WebJob SDK无法将输出绑定到字符串类型.

捆绑

 "bindings": [
    {
      "type": "serviceBus",
      "name": "msg",
      "queueName": "myqueue",
      "connection": "ServiceBusQueue",
      "accessRights": "manage",
      "direction": "out"
    }
  ]
Run Code Online (Sandbox Code Playgroud)

定时器功能

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace MyFunctionApp
{
    public static class TimerTrigger
    {
        [FunctionName("TimerTriggerCSharp")]
        public static void Run([TimerTrigger("1 * * * * *", RunOnStartup = true)]TimerInfo myTimer, TraceWriter log, out string msg)
        {
            log.Info($"C# Timer trigger function executed at: {DateTime.Now}");

            msg = "Hello!";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误信息

TimerTriggerCSharp:Microsoft.Azure.WebJobs.Host:错误索引方法'Functions.TimerTriggerCSharp'.Microsoft.Azure.WebJobs.Host:无法将参数'msg'绑定到String&.确保绑定支持参数Type.如果您正在使用绑定扩展(例如ServiceBus,Timers等),请确保您已在启动代码中调用扩展的注册方法(例如config.UseServiceBus(),config.UseTimers()等).

我错过了设置中的一个步骤,或者Service Bus绑定是否真的不支持out参数的字符串

c# azure azureservicebus azure-webjobs azure-functions

3
推荐指数
1
解决办法
2531
查看次数

Azure服务总线-使用BrokeredMessage.GetBody读取.NET Core 2发送的消息

我正在将.NET Core 2用于需要将消息放在Service总线上并由旧版.NET 4.6接收器读取的应用程序。接收者也收听来自其他传统应用程序的消息。

旧版寄件者:

UserData obj = new UserData()
{
  id = 1,
  name = "Alisha"
};
BrokeredMessage message = new BrokeredMessage(consentInstated);
_client.Send(message);
Run Code Online (Sandbox Code Playgroud)

旧版接收器:

var dataObj = objBrokeredMessage.GetBody<UserData>();
businessFunc(dataObj.id, dataObj.name);
Run Code Online (Sandbox Code Playgroud)

.NET Core 2发件人:/sf/answers/3154859641/中所述

var ser = new System.Runtime.Serialization.DataContractSerializer(typeof(UserData));
var ms = new MemoryStream();
ser.WriteObject(ms, objUserData);
var message = new Message(ms.ToArray());
_client.Send(message);
Run Code Online (Sandbox Code Playgroud)

但是,收件人无法反序列化该消息并引发以下错误

System.Runtime.Serialization.SerializationException:反序列化UserData类型的对象时发生错误。输入源的格式不正确。---> System.Xml.XmlException:输入源的格式不正确。

如何使两个发送方与同一接收方一起工作?

servicebus azure azureservicebus .net-core asp.net-core

3
推荐指数
1
解决办法
3101
查看次数

Azure Service Bus消息队列用户错误指标

我正在帮助调查和诊断我们遇到的一些问题,并注意到服务总线队列上的“用户错误”指标正在发生变化。我想确切了解此指标的含义,因为https://docs.microsoft.com/zh-cn/azure/service-bus-messaging/service-bus-metrics-azure-monitor中的文档有点模糊。

谢谢您的帮助。

azureservicebus

3
推荐指数
2
解决办法
1652
查看次数

使用Apache Camel访问Azure Service Bus?

如何使用Camel作为独立的Java应用程序使用Apache Camel访问Azure Service Bus?

java apache-camel azureservicebus

3
推荐指数
1
解决办法
753
查看次数