在AWS AppSync中,似乎不会将在主查询上发送的参数转发给所有子解析器。
type Query {
article(id: String!, consistentRead: Boolean): Article
book(id: String!, consistentRead: Boolean): Book
}
type Article {
title: String!
id: String!
}
type Book {
articleIds: [String]!
articles: [Article]!
id: String!
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时:
query GetBook {
book(id: 123, consistentRead: true) {
articles {
title
}
}
}
Run Code Online (Sandbox Code Playgroud)
获取书的第一个查询在中接收consistentRead参数$context.arguments,但随后的检索文章的查询则没有。($context.arguments为空)
我也尝试过articles(consistentRead: Boolean): [Article]!里面book但是没有运气。
有谁知道在AppSync中是否可以将参数传递给同一请求的所有查询?
如何在对象上调用方法名称的嵌套哈希?
例如,给定以下哈希:
hash = {:a => {:b => {:c => :d}}}
Run Code Online (Sandbox Code Playgroud)
我想创建一个方法,给定上面的哈希,相当于以下内容:
object.send(:a).send(:b).send(:c).send(:d)
Run Code Online (Sandbox Code Playgroud)
我的想法是,我需要从未知的关联中获取特定属性(此方法未知,但程序员已知).
我希望能够指定一个方法链来以嵌套哈希的形式检索该属性.例如:
hash = {:manufacturer => {:addresses => {:first => :postal_code}}}
car.execute_method_hash(hash)
=> 90210
Run Code Online (Sandbox Code Playgroud) 我在AWS Lambda上运行了一个基于微服务的应用程序.其中两个微服务,即最关键的微服务,使用事件源/ cqrs.
背景:(这也是我组织我的想法)
我正在使用此库 并在DynamoDB中存储事件并在AWS S3中进行投影.
写入部分就像一个魅力:每个命令调用从DynamoDB加载聚合的当前状态(通过处理器运行事件和/或加载缓存聚合),它决定接受或拒绝基于某些业务逻辑的命令,然后写入DynamoDB,KeyConditionExpression: 'aggregateId = :a AND version >= :v'其中版本是为该聚合处理的事件计数.如果存在冲突,则写入失败.对我来说似乎是一个很好的系统!
然后将每个事件广播到SNS(主题名称是服务名称),以便其他服务可以根据需要对事件做出反应.
我真正挣扎的部分是阅读.预测存储在S3中,并使用为每个事件源处理的最后一个commitId进行标记.当读取查询进入时,它从S3加载整个投影状态(对于所有聚合),查询所有较新事件的事件源,计算最新状态(同样,对所有聚合 - 并将更新对象写入S3,如果它是更新),并根据查询参数返回状态的相关部分.
我的问题:(或其中之一)
我认为我做错了.
我的大多数预测只按重要属性分组ID,因此文件保持相对较小.但我还需要一种方法来检索单个聚合.使用投影看起来很疯狂,因为我需要每次加载整个状态(即每个预测的聚合)将新事件应用于该状态,然后检索我想要的记录(它甚至可能没有改变).
这就是我现在正在做的,它表现良好(<100k记录),但我无法想象它会持续更长时间.
另一个问题是查询.我需要为我需要查询的每个属性构建一个投影映射值以匹配aggregateIds!必须有更好的方法!
无论我如何看待这个问题,投影总是需要整个当前状态+任何新事件才能返回一个没有改变的单个记录.