azure - 如何让 changefeed 侦听器的多个实例获得相同的消息:Java
问题描述
我们正在使用 Cosmos Changefeed 侦听器来更新临时 Java 服务中的边缘缓存。这意味着,所有任意数量的实例都应该接收每个 changefeed。我们使用 UUID 作为“主机名”,但并非所有实例都获得了 changefeed。我在某处读到有leasePrefix。那会奏效吗?如果是这样,如何在 Java 方面做到这一点?
解决方案
是的,Lease prefix
在这种情况下会帮助你。当特定 Azure Cosmos 容器中出现新事件时,您希望执行多项操作的场景。如果要触发的操作彼此独立,理想的解决方案是为每个要执行的操作创建一个 Cosmos DB 侦听器,所有这些侦听器都侦听同一 Azure Cosmos 容器上的更改。
鉴于 Cosmos DB 侦听器的要求,我们需要第二个容器来存储状态,也称为租用容器。这是否意味着您需要为每个 Azure Functions 使用单独的租用容器?
在这里,您有两个选择:
leases container
为每个侦听器创建一个:这种方法可能会转化为额外的成本,除非您使用的是共享吞吐量数据库。请记住,容器级别的最小吞吐量是 400 个请求单元,并且在租用容器的情况下,它仅用于检查点进度和维护状态。
拥有一个租用容器并为所有侦听器共享它:第二个选项可以更好地利用容器上的预置请求单元,因为它允许多个侦听器共享和使用相同的预置吞吐量。
以下是使用 Java 语言实现此功能的函数应用示例:https ://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2-trigger?tabs=java
快速参考代码:
@FunctionName("cosmosDBMonitor")
public void cosmosDbProcessor(
@CosmosDBTrigger(name = "items",
databaseName = "ToDoList",
collectionName = "Items",
leaseCollectionName = "leases",
leaseCollectionPrefix = "prefix",
createLeaseCollectionIfNotExists = true,
connectionStringSetting = "AzureCosmosDBConnection") String[] items,
final ExecutionContext context ) {
context.getLogger().info(items.length + "item(s) is/are changed.");
}
推荐阅读
- go - Reading Data from SSH Session Golang
- ldap - 带有联合存储库 (LDAP) 的 Websphere 8.5
- python - 为什么当我添加第二个条件时查询会中断?- 在值 2+ 列上查询数据框
- drupal-8 - Drupal 8 Attached library to a paragraph
- javascript - How to display Image in slider
- angularjs - Angular Js orderBy with input values
- python - Python PIL 由于某种原因无法打开 PDF
- java - JRadio 按钮和图像
- docker - 如何根据计数将所有容器的主机名添加到 nginx 上游
- r - 旋转设备区域外边缘的文本