正如 MSDN ( https://learn.microsoft.com/en-us/azure/service-bus-messaging/topic-filters )中所述,SQL 筛选器和相关筛选器都使用消息的系统定义属性和用户定义属性。
您能举个例子来说明两者之间的区别吗?
azure azureservicebus azure-servicebus-topics azure-servicebus-subscriptions
我有一个 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
我正在迁移到 Azure.Messaging.ServiceBus,并注意到现在不再有名为 Label 的属性
这是一个很大的问题,因为我们的服务总线规则中使用标签来过滤订阅上的消息。
使用 Azure.Messaging.ServiceBus 和 ServiceBusMessage 设置消息的等效项是什么
如果我必须使用主题,那真的很糟糕,因为我必须更改服务总线中的每一条规则,这完全是一场噩梦
干杯
保罗
我正在为我的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)
我在这里收到的消息体是一些简单的不可读的字符串.我正在从工人角色发送适当的对象.如果你们中有人知道什么是错的,请告诉我
谢谢
我想创建一个Azure应用程序,它执行以下操作:
从我一直阅读的内容来看,似乎有两种方法:Windows Azure Service Bus或使用Queues.每个辅助角色还将结果存储在数据库中.
服务总线似乎更适合其发布/订阅模型,因此所有工作者角色将获得相同的命令并且大致相同的时间.队列似乎更容易使用.
在开发时,服务总线是否可以在本地与仿真器一起使用?我正在使用免费试用版,但在开发过程中无法持续保留应用程序.此外,在使用队列时,如何通知Web角色处理完成?
通过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使用消息体.
我有一个应用程序,其中数据从SQL DB获取并作为代理消息发送到服务总线.这些是步骤:
这是我面临的第三步.这是代码:
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字节
我有一个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) 我有一个azure函数,它从服务总线队列中读取消息,并使用该消息向API发送请求.这很好用.
由于我们无法控制的因素,有时API可能无法访问.有没有办法阻止Azure功能从队列中接收更新或完全停止执行,直到理想情况下通过api调用或环境变量重新启动?
使用ASB集成测试系统的适当方法是什么?有了类似Kafka和使用docker-compose的东西,我可以启动两个将通过Kafka异步通信的服务.有没有办法与ASB做类似的事情?如果没有,什么是常见的集成测试模式?
azureservicebus ×10
azure ×9
c# ×4
.net ×1
azure-bicep ×1
azure-servicebus-subscriptions ×1
json ×1
json.net ×1
node.js ×1
queue ×1
servicebus ×1