具有不同绑定的 Azure 函数
Azure Function with different binds
我有一个应用程序可以为 Azure 服务总线队列和作为消费者的 Azure 函数发送一些事件,所以我的 Azure 函数有以下代码:
[FunctionName("application-events-consumer")]
public async Task Run([ServiceBusTrigger("events", Connection = "ServiceBusConnectionString")]
Message message,
string messageId,
ILogger log)
{
log.LogInformation($"MessageId={messageId}");
var jsonData = Encoding.UTF8.GetString(message.Body);
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
var deserialized = JsonConvert.DeserializeObject(jsonData, settings);
await _mediator.Publish(deserialized);
}
问题是:我们无法在本地 运行 Azure 服务总线,所以我考虑使用 Azure 存储队列进行本地开发,因为它有一个模拟器,我发送事件没有任何问题到 Azure 存储队列,因为我正在使用抽象,但我无法从队列中读取我的事件,因为我的 azure 函数使用特定于 Azure 服务总线的绑定,所以我无法从 Azure 存储队列读取事件,是吗两种情况都可以使用绑定吗? Azure 存储队列和 Azure 服务总线取决于我的连接字符串?
不,Azure 服务总线队列和 Azure 存储队列是两种截然不同的服务,具有完全不同的技术堆栈。所以你不能只切换两个连接字符串。他们需要不同的 SDK,因为他们有不同的绑定。
您唯一可以尝试的是拥有两个函数,一个具有用于本地调试的存储队列绑定,另一个具有用于 运行 在云中的 SB 队列绑定。两者都只是接收消息,然后将处理放在一个通用的内部函数中。但是,这当然不会完全测试您的堆栈。
我有一个应用程序可以为 Azure 服务总线队列和作为消费者的 Azure 函数发送一些事件,所以我的 Azure 函数有以下代码:
[FunctionName("application-events-consumer")]
public async Task Run([ServiceBusTrigger("events", Connection = "ServiceBusConnectionString")]
Message message,
string messageId,
ILogger log)
{
log.LogInformation($"MessageId={messageId}");
var jsonData = Encoding.UTF8.GetString(message.Body);
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
var deserialized = JsonConvert.DeserializeObject(jsonData, settings);
await _mediator.Publish(deserialized);
}
问题是:我们无法在本地 运行 Azure 服务总线,所以我考虑使用 Azure 存储队列进行本地开发,因为它有一个模拟器,我发送事件没有任何问题到 Azure 存储队列,因为我正在使用抽象,但我无法从队列中读取我的事件,因为我的 azure 函数使用特定于 Azure 服务总线的绑定,所以我无法从 Azure 存储队列读取事件,是吗两种情况都可以使用绑定吗? Azure 存储队列和 Azure 服务总线取决于我的连接字符串?
不,Azure 服务总线队列和 Azure 存储队列是两种截然不同的服务,具有完全不同的技术堆栈。所以你不能只切换两个连接字符串。他们需要不同的 SDK,因为他们有不同的绑定。
您唯一可以尝试的是拥有两个函数,一个具有用于本地调试的存储队列绑定,另一个具有用于 运行 在云中的 SB 队列绑定。两者都只是接收消息,然后将处理放在一个通用的内部函数中。但是,这当然不会完全测试您的堆栈。