标签: azureservicebus

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

如何使用 Bicep 将服务总线实体上的正确角色分配给 Azure 函数托管标识?

我有一个 Azure Functions 项目,其中有一个使用服务总线绑定的函数(用于侦听订阅并发送到主题)。

Azure 函数部署在托管标识下运行。由于我们希望使用 Azure Bicep 自动部署所有内容,因此我希望在 Azure Bicep 文件中自动为该托管标识的服务总线命名空间(或实体)提供正确的角色分配。

但我似乎不知道该怎么做。有人能够指示正确的二头肌片段来创建角色分配Azure Service Bus Data Receiver以及Azure Service Bus Data Sender在服务总线实体上针对特定托管身份吗?

(更好的是:我知道我对二头肌相当陌生,我怎样才能自己找到答案)

此致

azure azureservicebus azure-functions azure-managed-identity azure-bicep

3
推荐指数
1
解决办法
1627
查看次数

标签在 Azure.Messaging.ServiceBus.ServiceBus.ServiceBusMessage 中不可用

我正在迁移到 Azure.Messaging.ServiceBus,并注意到现在不再有名为 Label 的属性

这是一个很大的问题,因为我们的服务总线规则中使用标签来过滤订阅上的消息。

使用 Azure.Messaging.ServiceBus 和 ServiceBusMessage 设置消息的等效项是什么

如果我必须使用主题,那真的很糟糕,因为我必须更改服务总线中的每一条规则,这完全是一场噩梦

干杯

保罗

c# azure azureservicebus

3
推荐指数
1
解决办法
984
查看次数

如何在节点js中反序列化代理消息的主体?

我正在为我的windows azure项目在节点js(socketio.js)中实现socket.io服务器.我的工作角色是c#.我正在通过服务总线队列从worker角色向socketio.js发送代理消息.但是通过代理消息发送的对象没有被序列化为json对象.我不知道如何在节点js中访问此代理消息的主体.

我可以展示如何在worker角色中发送代理消息以及如何在节点js脚本中接收它.

代理消息的响应主体(即message.body)

@rrayOfTestModelHhttp://schemas.datacontract.org/2004/07/Project.Model     ?i)http://www.w3.org/2001/XMLSchema-instance?
Run Code Online (Sandbox Code Playgroud)

TestModel是通过代理消息体发送的对象模型的名称.

工人角色:

 BrokeredMessage socketioMessage = new BrokeredMessage(messageObject);
            WorkerRoleClient.Send(socketioMessage );
Run Code Online (Sandbox Code Playgroud)

Node Js脚本:

serviceBusService.receiveQueueMessage(queue, function (error, receivedMessage) {
    if (!error) {
        console.log(receivedMessage);
        if (receivedMessage != null) {
            var messageBody = receivedMessage.body;
            console.log(messageBody);       

            io.sockets.emit('news', messageBody);
}}
Run Code Online (Sandbox Code Playgroud)

我在这里收到的消息体是一些简单的不可读的字符串.我正在从工人角色发送适当的对象.如果你们中有人知道什么是错的,请告诉我

谢谢

json azure json.net node.js azureservicebus

2
推荐指数
1
解决办法
4970
查看次数

Windows Azure角色间通信

我想创建一个Azure应用程序,它执行以下操作:

  • 向用户呈现MVC 4网站(web角色),其显示命令列表.
  • 当用户选择命令时,它将广播给所有工作者角色.
  • 工作者角色处理任务,存储结果并通知Web角色
  • Web角色显示工作者角色的组合结果

从我一直阅读的内容来看,似乎有两种方法:Windows Azure Service Bus或使用Queues.每个辅助角色还将结果存储在数据库中.

服务总线似乎更适合其发布/订阅模型,因此所有工作者角色将获得相同的命令并且大致相同的时间.队列似乎更容易使用.

在开发时,服务总线是否可以在本地与仿真器一起使用?我正在使用免费试用版,但在开发过程中无法持续保留应用程序.此外,在使用队列时,如何通知Web角色处理完成?

queue azure asp.net-mvc-4 azureservicebus

2
推荐指数
1
解决办法
915
查看次数

BrokeredMessage Deseralization带有不需要的String

通过ServiceBus任何自定义传递代理消息DataContractSerializer[as Default XML Serializer Take Place].

var message = new BrokeredMessage(objMess.MessageBody);
Run Code Online (Sandbox Code Playgroud)

注意: 主要是邮件正文是HTML电子邮件的类型.

但是当在传递给worker角色的消息之后deserialization,我看到一些随机文本被附加在顶部正文中,

var reader = new StreamReader(receivedMessage.GetBody<Stream>());

@string3http://schemas.microsoft.com/2003/10/Serialization/?  .
Rest of Message Body 
Run Code Online (Sandbox Code Playgroud)

我试着给定制DataContractSerializer.但这搞砸了HTML符号.

一些格式化我找到的服务总线消息文章的内容,但仍然找到摆脱模式字符串的方法.

现在我正在substring使用消息体.

c# azure-worker-roles azureservicebus brokeredmessage

2
推荐指数
1
解决办法
2389
查看次数

使用SendBatchAsync方法向服务总线发送1000个代理消息

我有一个应用程序,其中数据从SQL DB获取并作为代理消息发送到服务总线.这些是步骤:

  1. 从DB获取的数据(批量为1000)
  2. 每行数据都转换为Brokered Message并添加到列表中.
  3. 使用SendBatchAsync方法将1000个代理消息的列表发送到服务总线.

这是我面临的第三步.这是代码:

public async Task SendMessagesAsync(List<BrokeredMessage> brokeredMessageList)
        {
            try
            {
                var topicClient = CreateTopicClient();
                await topicClient.SendBatchAsync(brokeredMessageList);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
Run Code Online (Sandbox Code Playgroud)

当编译器使用SendBatchAsync方法时,它会在与Service Bus通信期间出现Error错误.检查连接信息,然后重试.内部例外是:

Internal Server Error: The server did not provide a meaningful reply; this might be caused by a premature session shutdown. TrackingId:some guid here
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试发送100条消息,它可以正常工作.我该怎么做才能让它一次发送1000条消息?

注意:每条消息大小为1445字节

servicebus azure azureservicebus brokeredmessage

2
推荐指数
1
解决办法
3473
查看次数

.Net中的键控锁定

我有一个Azure Service Bus队列,我收到1到10条带有相同"密钥"的消息.其中一条消息需要使用长时间运行的操作进行处理.完成后,数据库将被更新,其他消息将检查它.但是,与此同时,其他消息将被重新排队,以便不会丢失该过程.

但重点是这个长时间运行的操作不能同时运行同一个键,不应该多次运行.

这是我到目前为止所得到的:

void Main()
{
    Enumerable.Range(1, 1000)
              .AsParallel()
              .ForAll(async i => await ManageConcurrency(i % 2, async () => await Task.Delay(TimeSpan.FromSeconds(10)))); 
}

private readonly ConcurrentDictionary<int, SemaphoreSlim> _taskLocks = new ConcurrentDictionary<int, SemaphoreSlim>();

private async Task<bool> ManageConcurrency(int taskId, Func<Task> task)
{
    SemaphoreSlim taskLock = null;

    try
    {
        if (_taskLocks.TryGetValue(taskId, out taskLock))
        {
            if (taskLock.CurrentCount == 0)
            {
                Console.WriteLine($"{DateTime.Now.ToString("hh:mm:ss.ffffff")},  {taskId}, I found. No available.. Thread Id: {Thread.CurrentThread.ManagedThreadId}");
                return false;
            }

            taskLock.Wait();

            Console.WriteLine($"{DateTime.Now.ToString("hh:mm:ss.ffffff")},  {taskId}, I found and took. Thread Id: …
Run Code Online (Sandbox Code Playgroud)

.net c# azure azureservicebus

2
推荐指数
1
解决办法
295
查看次数

以编程方式停止Azure功能并再次启动它

我有一个azure函数,它从服务总线队列中读取消息,并使用该消息向API发送请求.这很好用.

由于我们无法控制的因素,有时API可能无法访问.有没有办法阻止Azure功能从队列中接收更新或完全停止执行,直到理想情况下通过api调用或环境变量重新启动?

c# azure azureservicebus azure-functions

2
推荐指数
1
解决办法
794
查看次数

使用Docker集成测试Azure Service Bus

使用ASB集成测试系统的适当方法是什么?有了类似Kafka和使用docker-compose的东西,我可以启动两个将通过Kafka异步通信的服务.有没有办法与ASB做类似的事情?如果没有,什么是常见的集成测试模式?

integration-testing azure azureservicebus docker-compose

2
推荐指数
1
解决办法
1856
查看次数