首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Microsoft.Azure.ServiceBus迁移到Azure.Messaging.ServiceBus

从Microsoft.Azure.ServiceBus迁移到Azure.Messaging.ServiceBus
EN

Stack Overflow用户
提问于 2021-11-15 20:41:16
回答 2查看 259关注 0票数 1

我正在尝试更新这个函数以使用Azure.Messaging.ServiceBus并完全删除Microsoft.Azure.ServiceBus,但是似乎找不到任何资源来实现这一点。有人知道如何使用这个包向主题发送消息吗?

较早的函数是:

代码语言:javascript
复制
  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) }
            });          
    }

到目前为止,我已经做到了:

我的方向对吗?

代码语言:javascript
复制
  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));
      }
EN

回答 2

Stack Overflow用户

发布于 2021-11-15 21:36:28

虽然您每次都可以构建一个Service Bus客户端,但这并不理想。假设您使用的是最新的进程内SDK,您可以使用以下选项之一:

代码语言:javascript
复制
[FunctionName("PublishToTopic")]
public static async Task Run(
    [TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
    [ServiceBus("<topic_name>", Connection = "<connection_name>")] IAsyncCollector<ServiceBusMessage> collector)
{
    await collector.AddAsync(new ServiceBusMessage(new BinaryData($"Message 1 added at: {DateTime.Now}")));
    await collector.AddAsync(new ServiceBusMessage(new BinaryData($"Message 2 added at: {DateTime.Now}")));
}

或者,

代码语言:javascript
复制
[FunctionName("PublishWithSender"]
public static async Task Run(
    [TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
    [ServiceBus("<topic_name>", Connection = "<connection_name>")] ServiceBusSender sender)
{
    await sender.SendMessagesAsync(new[]
    {
        new ServiceBusMessage(new BinaryData($"Message 1 added at: {DateTime.Now}")),
        new ServiceBusMessage(new BinaryData($"Message 2 added at: {DateTime.Now}"))
    });
}

对于Isolated Worker SDK来说,这有些不同。详情请参见this post

票数 1
EN

Stack Overflow用户

发布于 2021-11-15 21:13:33

你的方向是对的。没有简单的迁移工具/示例,因为它们是处理相同服务(Azure服务总线)的不同库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69980614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档