我刚刚开始使用Windows Azure Service Bus(主题和队列),并且正在尝试实现竞争消费者消息传递模式。
本质上,我希望有一组消息生产者和一组消息消费者。生成消息后,我希望第一个可用的使用者处理该消息。没有其他消费者可以收到此消息。
在Azure中有办法做到这一点吗?
我正在使用新的Windows Server Service Bus 1.0 Beta开始一个新项目的工作.我正在尝试在AWS EC2虚拟机上设置测试环境.
我已在AWS EC2上运行的Windows Server 2008 R2实例上安装了Service Bus,并根据MSDN documentatoin中的示例设置了新的Farm,Container和Host.我在服务器上打开了所有正确的端口(4443和9354).我还按照[本页] [1]的说明将自生成的证书导出到我的客户端计算机上.
我有一个非常简单的C#程序,它创建一个队列,对消息进行排队并接收它.当我将可执行文件复制到VM并在那里运行时,这个程序工作正常,所以我相信我正在使用API.但是,当我从指向AWS服务器的本地开发框运行程序时,我得到了安全性异常.
我的代码看起来像这样:
var servername = "X.X.X.X"; // <-- An IP Address, not FQDN
var sbNamespace = "MyNamespace";
var httpPort = 4446;
var tcpPort = 9354;
//create SB uris
var rootAddressManagement = ServiceBusEnvironment.CreatePathBasedServiceUri("sb", sbNamespace, string.Format("{0}:{1}", servername, httpPort));
var rootAddressRuntime = ServiceBusEnvironment.CreatePathBasedServiceUri("sb", sbNamespace, string.Format("{0}:{1}", servername, tcpPort));
var tokenProvider = TokenProvider.CreateWindowsTokenProvider(new List<Uri>() { rootAddressManagement });
var namespaceManager = new NamespaceManager(rootAddressManagement,
new NamespaceManagerSettings()
{
TokenProvider = tokenProvider
});
var …Run Code Online (Sandbox Code Playgroud) 我正在开发一个从Azure Service Bus队列中提取消息的Java应用程序.我正在使用Java Azure API(com.microsoft.windowsazure.services).我遇到的问题是,经过处理后删除代码消息有时会失败.
我的应用程序使用peek-lock接收模式,使用ServiceBusContract对象上的receiveQueueMessage()方法从队列中提取消息.一旦消息被成功处理,我通过调用deleteMessage()方法从队列中删除消息(我相信这个方法对应于.NET API中的Complete()方法).
但是,有时此方法调用失败.comMun.jersey.api.client.UniformInterfaceException异常由deleteMessage()记录到控制台,但它不会抛出此异常(我将在下面生成输出).异常似乎告诉我无法找到该消息.发生这种情况时,消息将保留在队列中.实际上,下一次调用receiveQueueMessage()会再次检索此消息.然后删除失败一次或两次,然后成功.之后检索的消息成功删除.
以下是出现问题的代码:
ReceiveMessageOptions receiveOptions = ReceiveMessageOptions.DEFAULT;
receiveOptions.setReceiveMode(ReceiveMode.PEEK_LOCK);
BrokeredMessage message = serviceBus.receiveQueueMessage("my_queue",receiveOptions).getValue();
// Process the message
System.out.println("Delete message with ID: "+message.getMessageId());
serviceBus.deleteMessage(message);
Run Code Online (Sandbox Code Playgroud)
以下是出现问题时输出的示例:
Delete message with ID: 100790000086491
2013/01/22 12:58:29 com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusExceptionProcessor processCatch
WARNING: com.sun.jersey.api.client.UniformInterfaceException: DELETE https://voyagernetzmessaging.servicebus.windows.net/sms_queue/messages/24/efa56a1c-95e8-4cd6-931a-972eac21563a returned a response status of 404 Not Found
com.sun.jersey.api.client.UniformInterfaceException: DELETE https://voyagernetzmessaging.servicebus.windows.net/sms_queue/messages/24/efa56a1c-95e8-4cd6-931a-972eac21563a returned a response status of 404 Not Found
at com.sun.jersey.api.client.WebResource.voidHandle(WebResource.java:697)
at com.sun.jersey.api.client.WebResource.delete(WebResource.java:261)
at com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusRestProxy.deleteMessage(ServiceBusRestProxy.java:260)
at com.microsoft.windowsazure.services.serviceBus.implementation.ServiceBusExceptionProcessor.deleteMessage(ServiceBusExceptionProcessor.java:176)
at microworks.voyagernetzmessaging.smsservice.SmsSender$Runner.finalizeSms(SmsSender.java:114)
at microworks.voyagernetzmessaging.smsservice.SmsSender$Runner.finalizeSms(SmsSender.java:119)
at microworks.voyagernetzmessaging.smsservice.SmsSender$Runner.run(SmsSender.java:340)
com.microsoft.windowsazure.services.core.ServiceException: com.sun.jersey.api.client.UniformInterfaceException: DELETE …Run Code Online (Sandbox Code Playgroud) 我有一个包含 12 个主题的 Azure 服务总线。我正在制作一个可扩展的应用程序,如果主题数量减少或增加,应用程序应该connectionString用来获取该服务总线的所有主题名称。
如何从特定 Azure 服务总线获取所有主题名称?
请提供从特定 Azure 服务总线检索主题列表的代码示例。
我有一个WebJob,它从事件主题中读取消息,处理它们,然后在不同的主题上创建消息.
我可以使用服务总线触发器轻松实现这一点.
public void EventSubscriptionToNotificationTopic(
[ServiceBusTrigger(Subscribe.TopicName, Subscribe.SubscriptionName)] BrokeredMessage input,
[ServiceBus(Publish.TopicName)] out BrokeredMessage output)
Run Code Online (Sandbox Code Playgroud)
为此,我们必须使用服务总线连接字符串,该字符串包含一个共享访问密钥,该密钥允许在可以访问这两个主题(root)的级别上发送和侦听权限.
我们希望能够使用不同的连接字符串/ SAS令牌锁定我们在这些主题上所需的权限(监听事件主题订阅和发送主题以发布到).
是否可以指定服务总线触发器或属性将使用哪个连接?
如果不是我必须自己滚动,可能只是使用服务总线触发器和WebJob连接字符串来读取消息,然后使用TopicClient在发布主题上创建新消息?
我正在创建一个带有Service Bus触发器的Azure功能,并尝试将传入的消息绑定到我的自定义类:
public class InputMessage
{
public string EntityId { get; set; }
}
public static string Run(InputMessage message, TraceWriter log)
{
log.Info($"C# ServiceBus trigger function processed message: {message}");
}
Run Code Online (Sandbox Code Playgroud)
我的消息是JSON,例如
{ "EntityId": "1234" }
Run Code Online (Sandbox Code Playgroud)
不幸的是,绑定在运行时失败,并显示以下消息:
执行函数时出现异常:Functions.ServiceBusTriggerCSharp1.Microsoft.Azure.WebJobs.Host:发生了一个或多个错误.异常绑定参数'message'.System.Runtime.Serialization:期望来自名称空间' http://schemas.datacontract.org/2004/07/ '的元素'Submission_x0023_0.InputMessage' .遇到名为'string'的'Element',名称空间' http:// schemas .microsoft.com/2003/10 /序列化/ '..
看起来运行时尝试使用反序列化消息DataContractSerializer.如何将反序列化切换为JSON?
我目前的工作,我在这里使用Microsoft.Azure.Servicebus 1.0版NuGet包基金的.Net核心项目: https://github.com/Azure/azure-service-bus
我遇到的问题是我找不到获取队列数量的活动消息的方法.使用ServicebusNamespace.NamespaceManager,使用.Net框架,引用队列并使用.ActiveMessageCount,这很容易
有没有人知道在这个带有.Net Core 1.1的库中是否可以通过其他方式实现这一点?
azureservicebus azure-servicebus-queues .net-core asp.net-core
我的Azure功能需要使用服务总线触发器(主题)定义的连接是什么?
运行看起来像这样
public static void Run([ServiceBusTrigger("testtopic", "testsubscription", AccessRights.Manage, Connection = "")]string mySbMsg, TraceWriter log)
Run Code Online (Sandbox Code Playgroud)
它是ServiceBus的共享访问策略(端点:sb:// ...)下的策略的连接字符串吗?
我是Azure的新手,我编写了一个Azure函数,当消息到达服务总线队列时会触发该函数。我需要手动删除此消息还是由服务总线处理?
我在Azure上使用会话队列,当我在队列上推送一些数据时,我写了一个Azure函数来触发.
请注意,我已经创建了基于状态/会话的队列.
问题是当我将数据推送到队列时,我得到了错误
函数'xxx'的监听器无法启动.Microsoft.ServiceBus:需要会话的实体不可能创建非会话消息接收器
所以我的问题是我无法使用带会话的队列/主题功能吗?
azureservicebus ×10
azure ×8
c# ×3
.net-core ×1
amazon-ec2 ×1
asp.net-core ×1
java ×1
servicebus ×1