我正在尝试更新此函数以使用Azure.Messaging.ServiceBus并完全删除Microsoft.Azure.ServiceBus,但似乎找不到任何资源。有人知道如何使用这个包向主题发送消息吗?
旧的函数是:
public async Task SendMessageToServiceBusTopic<T>(T request, string topicSubName, string submissionNumber)
{
ServiceBusConnectionStringBuilder serviceBusConnectionStringBuilder =
new ServiceBusConnectionStringBuilder(settings.ServiceBusConnectionString)
{
EntityPath = settings.ServiceBusTopic
};
TopicClient topicClient = new TopicClient(serviceBusConnectionStringBuilder);
byte[] bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request));
await topicClient.SendAsync(new Message(bytes)
{
CorrelationId = context.CorrelationId,
Label=topicSubName,
UserProperties = { new KeyValuePair<string, object>("TrackingId", submissionNumber) }
});
}
到目前为止,我已经做到了:
我走的方向对吗?
public async Task SendMessageToServiceBusTopic<T>(T request, string topicSubName, string submissionNumber)
{
ServiceBusClient client = new ServiceBusClient(settings.ServiceBusConnectionString);
ServiceBusSender s = client.CreateSender(settings.ServiceBusTopic);
byte[] bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request));
await s.SendMessageAsync(new ServiceBusMessage(bytes));
}
3条答案
按热度按时间h6my8fg21#
虽然每次都可以构造服务总线客户机,但这并不理想。假设您使用的是最新的In-Proc SDK,您可以使用以下选项之一:
或者,
对于隔离工作者SDK,它有些不同。详情请参见this post。
inn6fuwd2#
我和你的情况一样(试图迁移到Azure.Messaging.ServiceBus,这是微软现在推荐的NuGet)。
你可以从他们的Github上看一下迁移指南,了解如何使过渡更平滑:https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Azure.Messaging.ServiceBus/MigrationGuide.md
/!*IQueueClient和ITopicClient*(均来自Microsoft.Azure.ServiceBus)已合并为一个名为ServiceBusSender的对象。
为什么?让我们的生活更轻松!实际上,在幕后,ServiceBusSender现在负责发送消息的过程,特别是因为队列和主题不能具有相同的名称(如果我没有错的话)。
下面是我使用新库发送消息的示例代码:
如果您需要进行依赖注入(例如,重用同一个ServiceBusClient对象,避免为要发送的每条消息示例化ServiceBusClient),可以参考我本周发现的这个堆栈溢出
How to register ServiceBusClient for dependency injection?
k4ymrczo3#
你的方向是对的没有简单的迁移工具/示例,因为它们是处理相同服务(Azure服务总线)的不同库。