我正在试验 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
我有一个订阅模型,并且想要执行与更新相关的逻辑,例如开具新发票、发送电子邮件等。例如,用户今天购买订阅,并且更新是在一年的时间。我最近一直在使用 Azure Queue,并认为它会申请这样的续订。
是否可以通过使用BrokeredMessage.ScheduledEnqueueTimeUtc( http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.scheduledenqueuetimeutc.aspx )推送消息来使用 Azure 队列来处理此类长期计划消息?
我在短期内使用它,比如在 1 分钟内发送通知,效果很好。
这样,我什至可以让多个进程监听队列,并确保只有一个进程会执行更新逻辑。这将解决许多与锁定相关的问题,因为它是通过租用和相关功能内置在 Azure 队列中的。
我正在尝试遵循本教程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 中,我阅读了一些关于服务总线的内容,并想知道我是否可以使用它来排队电子邮件
托管在 azure 中的应用程序虽然使用自定义库将其电子邮件传送到服务总线队列,一个或多个工作进程将从队列中挑选消息,然后通过邮件中继服务发送。
这将使我的开发人员免于我随时使用的邮件中继服务的详细信息,并且我还可以在发送之前对消息进行进一步处理,而无需开发人员更改他们的代码。
我的问题是,这是否可能,如果可能,是否可取,以及在实施此类解决方案时我需要注意什么。任何关于如何做的指示也将不胜感激
我正在将应用程序从使用 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) 我第一次使用 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?
我创建了一个如下所示的 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)?
编辑:
该功能的我的应用程序设置:
我尝试使用 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) 如果我将来使用这样的方式安排消息:
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 函数,它发出一个基于 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
azureservicebus ×10
azure ×8
c# ×5
masstransit ×2
email ×1
httpresponse ×1
json ×1
node.js ×1
python ×1