我正在学习消息传递系统,但对这些术语感到困惑。
下面的所有消息传递系统都提供了具有不同功能集的服务之间的松散耦合。
queue
- FIFO,拉动机制,每个队列有 1 个消费者,但有任意数量的生产者?
message bus
- 发布/订阅模型,任意数量的消费者和任意数量的生产者处理消息?是Azure Service Bus
的实现message bus
?
event bus
- 发布/订阅模型,任意数量的消费者和任意数量的生产者处理事件?
就术语而言,人们是否可以互换使用message bus
和event bus
?
事件和消息有什么区别?在这种情况下,这些只是同义词吗?
event hub
- 发布/订阅模型,分区,重放,消费者可以将事件存储在外部存储中或接近实时数据分析。究竟什么是事件中心?
event grid
- 它可以用作事件中心的下游服务。它究竟做了哪些event hub
没有做的事情?
有人可以提供一些历史背景,说明每种技术如何演变为另一种技术,每种技术都与一些实际用例相关联吗?
我发现消息总线与消息队列有帮助
message-queue servicebus azureservicebus azure-eventhub azure-eventgrid
我正在尝试自动部署我们的环境vir ARM模板.我可以部署事件网格和功能应用程序,但现在我需要在部署功能应用程序后将功能应用程序订阅到事件网格.有没有办法获得功能应用程序的webhook网址
一旦我们有了webhook网址,我们就可以通过ARM创建订阅 - 但是要找到正确的网址似乎是我们堕落的地方.
请帮忙
我目前使用以下方法上传 CloudBlockBlob:
CloudBlockBlob.UploadFromStreamAsync
然后我马上在上面设置了一堆用户元数据。
问题是:我有一个事件网格事件,在上传 blob 时会触发该事件,但事件处理程序需要元数据。长话短说,这是一个竞争条件,我必须“希望”在我的事件处理程序响应块 blob 上传之前已经设置了元数据。
是否有某种方法可以在单个操作中上传块 blob(文件)并设置其元数据?
好的,非常基本 - 我似乎无法在 Azure 门户中创建对 Azure 事件网格主题的订阅。按照指南进行操作,表格中没有红色墨水(表示任何错误或我错过的任何内容),但“创建”按钮仍然保持灰色,对我越来越绝望的按下没有反应!
因此,在 Azure 门户上使用“创建事件订阅”表单...
显然缺少一些非常基本的东西,但表格没有给出任何关于它是什么的线索。
唯一的想法是:
我不知所措。我已经包含了高级编辑器中显示的尝试订阅的 json(如果这提供了任何线索)...
{
"name": "testeventsub",
"properties": {
"topic": "/subscriptions/xxxxxxxxxx/resourceGroups/DBProject/providers/Microsoft.EventGrid/topics/filings",
"destination": {
"endpointType": "AzureFunction",
"properties": {
"resourceId": "/subscriptions/xxxxxxxxxxx/resourceGroups/DBProject/providers/Microsoft.Web/sites/FilingTestEventTrigger1/functions/NewFilingTrigger1",
"maxEventsPerBatch": 1,
"preferredBatchSizeInKilobytes": 64
}
},
"filter": {
"advancedFilters": []
},
"labels": [],
"eventDeliverySchema": "EventGridSchema"
}
Run Code Online (Sandbox Code Playgroud)
}
验证webhook是否已通过azure事件网格而非其他可能是恶意的服务或人员发送到我的订阅端点的最佳做法是什么.
我已经配置了事件网格订阅,以在创建资源时启动针对资源组中事件的Web挂接调用。
Web挂钩调用已成功处理,我返回200。为保持幂等性,我将发生的所有事件webhook_events
与事件ID一起存储在表中。检查任何新事件,以查看它们是否存在于该表中。
这对我来说是个问题,因为我多次接收到同一事件,但ID却不同。我通过差异检查器将其发送,并确认事件之间的唯一区别是它们的eventTime和它们的ID(但这是同一事件,即SQL数据库上的Microsoft.Resources.ResourceWriteSuccess)。
原因是事件网格多次向我发送具有不同ID的同一事件吗?
编辑:
我已与Microsoft谈过此事,他们告诉我,如果未返回接受的响应代码,则该事件将使用不同的ID复制并再次发送。这显然是一个痛苦的工作。
我立即以200 OK响应,但是事件网格太大且处理起来太慢,无法接受我的事件,因此它再次发送了事件。我想挑战任何人,寻找一种区分这些重复事件的方法。
azure azure-eventhub azure-sql-database azure-sql-server azure-eventgrid
我们有一个带有Azure 事件网格主题的Azure 设置,并且有一个Azure 函数服务,其中包含大约 15 个函数,这些函数通过不同的前缀过滤器订阅该主题。Azure Function Service设置为基于消耗的资源,并且应该能够根据需要进行扩展。
\n每个订阅都设置为在放弃事件之前最多 4 小时内尝试传送 10 次。到目前为止一切顺利,设置在大多数情况下都按预期工作 \xe2\x80\x93 。
\n在某些情况下,对于我们未知的情况,事件网格主题似乎无法将事件传递到不同的功能。我们可以看到,我们的死信存储填满了尚未传递的事件。
\n从日志中我们可以看到各种事件未传递的原因。最常见的原因是结果:缓刑。我们无法从 Microsoft 找到任何有关这实际含义的信息。
\n此外,在超过超时策略(4 小时)和传递尝试策略(10 次重试)之前,网格会失败并将事件添加到死信日志中。有时,功能服务处于空闲状态并且没有从网格接收任何事件。
\n你们中的任何好心人是否知道我们如何继续解决此问题?当出现错误消息“试用期”时,Grid 和 Funciton 应用程序之间发生了什么?我们注意到的一件事是,与传递的事件数量相比,从网格到函数应用程序的连接数量相当高。\n除了事件网格之外,函数应用程序没有其他传入连接。
\n[{\n "id":"a40a1f02-5ec8-46c3-a349-aea6aaff646f",\n "eventTime":"2020-06-02T17:45:09.9710145Z",\n "eventType":"mitbalAdded",\n "dataVersion":"1",\n "metadataVersion":"1",\n "topic":"/subscriptions/XXXXXXX/resourceGroups/XXXX_STAGING/providers/Microsoft.EventGrid/topics/XXXXXstaging",\n "subject":"odl/type/mitbal/v1",\n "deadLetterReason":"TimeToLiveExceeded",\n "deliveryAttempts":6,\n "lastDeliveryOutcome":"Probation",\n "publishTime":"2020-06-02T17:45:10.1869491Z",\n "lastDeliveryAttemptTime":"2020-06-02T19:30:10.5756332Z",\n "data":"<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?><Stock><Action>ADD</Action><Id>123456</Id><Store>123</Store><Shelf>1</Shelf></Stock>"\n}]\n\n
Run Code Online (Sandbox Code Playgroud)\n 我正在尝试使用"endpointType": "AzureFunction"创建事件网格主题订阅。它给出以下错误:-
"error": { "code": "InvalidRequest", "message": "无效的事件订阅请求:提供的 URL 无效。它不能为 null 或为空,并且应该是正确的 HTTPS URL,例如https://www.example。 com。” }
我的 ARM 模板如下:-
{
"name": "[concat(variables('eventGridTopicName'), '/Microsoft.EventGrid/', variables('myFuncName'))]",
"type": "Microsoft.EventGrid/topics/providers/eventSubscriptions",
"apiVersion": "2019-01-01",
"location": "[parameters('location')]",
"properties": {
"topic": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('resourceGroupName'), '/providers/Microsoft.EventGrid/topics/', variables('eventGridTopicName'))]",
"destination": {
"endpointType": "AzureFunction",
"properties": {
"resourceId": "[resourceId('Microsoft.Web/sites/functions/', variables('funcAppName'), variables('myFuncName'))]",
"maxEventsPerBatch": 1,
"preferredBatchSizeInKilobytes": 64
}
},
"filter": {
"advancedFilters": [
{
"operatorType": "StringIn",
"key": "eventType",
"values": [
"xyzEvent"
]
},
{
"operatorType": "StringIn",
"key": "subject",
"values": [
"xyzEventReceived"
] …
Run Code Online (Sandbox Code Playgroud) azure azure-resource-manager azure-rm-template azure-functions azure-eventgrid
我们在标准应用服务计划中托管了功能应用。为了保护功能应用程序的安全,我们将其集成到 VNet,并仅允许来自 API 管理服务的流量。现在,我们希望允许来自具有函数应用程序端点 Web 挂钩的事件网格(它具有 IoTHub 和 SignalR 订阅)的流量。
我们的一种选择是将所有事件网格 IP 范围列入白名单。我们尝试的第二个选项是允许使用网络安全组的事件网格服务标记。但是,azure 不允许 NSG 中的入站规则到 VNet。除了将所有 Event-Grid IP 范围列入白名单之外,还有其他干净的方法吗?