标签: azureservicebus

NotificationHubClient 应该在哪里实例化?

我正在试验 Azure 通知总线,我的目标是让 WebApi 服务根据控制器操作触发的特定事件发送推送通知。

我想知道实例化NotificationHubClient对象的正确位置在哪里。
我假设它可以在控制器中(就在发送通知之前),或者可以全局初始化(如在 App_Start 中)并在控制器中重新使用。

本示例教程中NotificationHubClient在控制器中实例化:

public RegisterController()
{
    var cn = "<FULL_SAS_CONNECTION_STRING>";
    hubClient = NotificationHubClient(cn, "<NOTIFICATION_HUB_NAME>");
}
Run Code Online (Sandbox Code Playgroud)

什么是首选方式?

c# azure azureservicebus asp.net-web-api azure-notificationhub

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

使用 Azure 服务总线队列和 BrokeredMessage.ScheduledEnqueueTimeUtc 续订订阅

我有一个订阅模型,并且想要执行与更新相关的逻辑,例如开具新发票、发送电子邮件等。例如,用户今天购买订阅,并且更新是在一年的时间。我最近一直在使用 Azure Queue,并认为它会申请这样的续订。

是否可以通过使用BrokeredMessage.ScheduledEnqueueTimeUtc( http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.scheduledenqueuetimeutc.aspx )推送消息来使用 Azure 队列来处理此类长期计划消息?

我在短期内使用它,比如在 1 分钟内发送通知,效果很好。

这样,我什至可以让多个进程监听队列,并确保只有一个进程会执行更新逻辑。这将解决许多与锁定相关的问题,因为它是通过租用和相关功能内置在 Azure 队列中的。

c# azure azureservicebus azure-servicebus-queues

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

将消息发送到 Azure 队列 Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException

我正在尝试遵循本教程https://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-multi-tier-app-using-service-bus-queues/ on azure queues 但我选择使用 MVC 应用程序而不是 Web 角色。在创建 web 角色的第 9 步之前,我已经完成了所有工作,它说您现在应该能够点击提交并观察页面上队列的消息计数增加。

相反,我得到了 Microsoft.ServiceBus.dll 中发生的类型为“Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException”的异常,但未在用户代码中处理

附加信息:40400:未找到端点。

在第 8 步将消息发送到队列时。它检测到队列在那里,否则它不会跳过检查它是否创建,所以我不得不认为这是某种访问问题。

有人可以帮助我吗?

azure azureservicebus azure-servicebus-queues

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

使用 azure servicebus 对电子邮件进行排队

我们只是将我们的一些工作负载移到了我目前正在管理的 azure 中,我阅读了一些关于服务总线的内容,并想知道我是否可以使用它来排队电子邮件

托管在 azure 中的应用程序虽然使用自定义库将其电子邮件传送到服务总线队列,一个或多个工作进程将从队列中挑选消息,然后通过邮件中继服务发送。

这将使我的开发人员免于我随时使用的邮件中继服务的详细信息,并且我还可以在发送之前对消息进行进一步处理,而无需开发人员更改他们的代码。

我的问题是,这是否可能,如果可能,是否可取,以及在实施此类解决方案时我需要注意什么。任何关于如何做的指示也将不胜感激

email azure azureservicebus azure-servicebus-queues

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

使用 Azure 服务总线创建队列的 MassTransit 3

我正在将应用程序从使用 MT3 与 RabbitMQ 转换为使用 Azure 服务总线,MassTransit 在 Azure 中配置队列的方式与使用 RMQ 的方式不同,并且文档偏轻(此处)我想看看有没有其他人解决了这个问题

我将 MT 3.4 和 Microsoft.ServiceBus 3.0 用于 TokenProvider,我有一个创建总线的实用程序类(按照此示例):

    public static IBus CreateBus()
    {
        var busControl = Bus.Factory.CreateUsingAzureServiceBus(sbc =>
        {
            var host = sbc.Host(new Uri("sb://<sbname>.servicebus.windows.net/"), h =>
            {
                h.OperationTimeout = TimeSpan.FromSeconds(5);
                h.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("<KeyName>", "<Key>");
            });

            sbc.ReceiveEndpoint(host, "command_queue", ep =>
            {
                ep.SubscribeMessageTopics = true;
                ep.UseRetry(Retry.Incremental(5, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5)));
            });
        });

        return busControl;
    }
Run Code Online (Sandbox Code Playgroud)

我有一个 Web API 控制器,它使用总线将命令发布到队列:

[RoutePrefix("customer")]
public class CustomerController : ApiController
{
    private readonly …
Run Code Online (Sandbox Code Playgroud)

c# masstransit azure azureservicebus

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

Azure 服务总线 python 客户端问题

我第一次使用 azure 服务总线在 C# 源和 python 客户端之间传输消息。

我正在创建 ServiceBusService 对象并使用它从函数receive_subscription_message 中获取消息

我得到的有效载荷不符合预期。

我的代码如下所示。

bus_service = ServiceBusService(service_namespace="service_namespace", shared_access_key_name="All", shared_access_key_value="password")
msg = bus_service.receive_subscription_message('test', 'test', peek_lock=True)
print(msg.body)
msg.delete()
Run Code Online (Sandbox Code Playgroud)

msg.body 给出一个字节字符串,如下所示: b'@\x06string\x083http://schemas.microsoft.com/2003/10/Serialization/\x9ae\x0c{"PUID":"3NFLzV3cjCp8f5JLh3KSnkXDgSw1FWgM","HardDelete":null}\x01'

本来是把json推进去的。有没有办法避免额外的参数并只获取原始json?

python json azure azureservicebus

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

Azure Functions 中 local.settings.json 的值

我创建了一个如下所示的 Azure 函数(实际上,Microsoft 模板完成了大部分工作!):

[FunctionName("Function1")]
public static void Run([ServiceBusTrigger("%queue-name%", AccessRights.Listen)]string myQueueItem, TraceWriter log)
{
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
Run Code Online (Sandbox Code Playgroud)

我的 local.settings.json 看起来像这样:

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "..",
    "AzureWebJobsDashboard": "..",
    "AzureWebJobsServiceBus": "..",
    "queue-name":  "testqueue"

  }
}
Run Code Online (Sandbox Code Playgroud)

然后我部署了这个功能。这是一个奇怪的问题,因为我的问题是它立即起作用,但我没想到它会起作用。function.json 在这里:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "serviceBusTrigger",
      "queueName": "%queue-name%",
      "accessRights": "listen",
      "name": "myQueueItem"
    }
  ],
  "disabled": false,
  "scriptFile": "..\\bin\\FunctionApp8.dll",
  "entryPoint": "FunctionApp8.Function1.Run"
}
Run Code Online (Sandbox Code Playgroud)

显然,local.settings.json 中的值已复制到功能设置中,但我在门户中看不到它们。我的问题是:这些设置现在存储在哪里(队列名称和 AzureWebJobsServiceBus)?

编辑:

该功能的我的应用程序设置:

应用程序设置

c# azure azureservicebus azure-functions

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

如何指定要与 MassTransit 一起使用的 Azure 服务总线主题

我尝试使用 MassTransit 将消息发布到eventsAzure 服务总线中命名的主题。我在配置 MassTransit 以使用我预定义的主题时遇到问题events,而是为消息类型创建了一个由命名空间/类名命名的新主题。所以我想知道如何指定使用哪个主题而不是创建一个新主题。

这是我测试过的代码:

using System;
using System.Threading.Tasks;
using MassTransit;
using MassTransit.AzureServiceBusTransport;
using Microsoft.ServiceBus;

namespace PublisherNameSpace
{
    public class Publisher
    {
        public static async Task PublishMessage()
        {
            var topic = "events";
            var bus = Bus.Factory.CreateUsingAzureServiceBus(
                cfg =>
                {
                    var azureServiceBusHost = cfg.Host(new Uri("sb://<busname>.servicebus.windows.net"), host =>
                    {
                        host.OperationTimeout = TimeSpan.FromSeconds(5);
                        host.TokenProvider =
                            TokenProvider.CreateSharedAccessSignatureTokenProvider(
                                "RootManageSharedAccessKey",
                                "<key>"
                            );
                    });

                    cfg.ReceiveEndpoint(azureServiceBusHost, topic, e =>
                    {
                        e.Consumer<TestConsumer>();
                    });
                });

            await bus.Publish<TestConsumer>(new TestMessage { TestString = "testing" });
        } …
Run Code Online (Sandbox Code Playgroud)

c# masstransit azureservicebus azure-servicebus-topics

4
推荐指数
2
解决办法
2442
查看次数

Azure 服务总线队列:我可以管理/取消预定的消息吗?

如果我将来使用这样的方式安排消息:

d = datetime.utcnow() + timedelta(minutes=5)
task = {"some": "object"}

sbs.send_queue_message(
    qn,
    Message(
        task, 
        broker_properties={'ScheduledEnqueueTimeUtc': d}
    )
)
Run Code Online (Sandbox Code Playgroud)

那么有没有一种方法可以查看/删除已安排的消息?send_queue_message不返回任何东西,可以receive_queue_message理解的是,不会返回计划稍后排队的项目 - 所以我无法抓住它传递给delete_queue_message例如。

Azure 团队似乎知道这个用例,因为存储队列似乎有这样的功能:https : //azure.microsoft.com/en-gb/blog/azure-storage-queues-new-feature-pop-receipt-on -添加消息/

基本上我需要能够安排稍后排队的消息,但是可以取消。理想情况下,我还希望能够查看所有未来的计划任务,但能够仅存储可用于稍后删除排队消息的 id 就足够了。

Azure UI 也显示了活动/计划消息的数量,这似乎表明应该有某种方法可以查看这些计划消息!

队列存储会更好吗?或者服务总线是否有一些可行的方法?ScheduledEnqueueTimeUtc似乎比队列存储中的可见性超时更灵活,所以如果可以的话,坚持下去会很好。

azure azureservicebus azure-servicebus-queues

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

如何从NodeJS中的单个azure函数向azure服务总线和事件发送消息到事件中心总线?

我有一个 azure 函数,它发出一个基于 Promise 的 http post 请求并得到响应;现在我想将此响应发送到服务总线和不同的事件中心(azure 函数由不同的事件中心触发)。

函数表示在事件中心的情况下它已成功执行,但没有发送任何事件。在服务总线的情况下,我收到此错误NamespaceConnectionString should not contain EntityPath.

module.exports = async function (context, eventHubMessages) {
    context.log(`JavaScript eventhub trigger function called for message array ${eventHubMessages}`);

    var completeData = '';

    eventHubMessages.forEach((message, index) => {
        context.log(`Processed message ${message}`);
        completeData = message;
    });

    var output = '';

    const axios = require('axios');

    try {
        const response =  await axios.post('http://fake-endpoint', 
        {  data-json : completeData
        })
        context.log(`statusCode: ${response.statusCode}`);
        context.log(response.data);
        output += response.data;

        var time = new Date().toString(); 
        context.log('Event Hub message …
Run Code Online (Sandbox Code Playgroud)

httpresponse node.js azureservicebus azure-eventhub azure-functions

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