1) EAA目录中的网关模式
通过使用网关模式隐藏了商业微服务的复杂性。该组件负责根据配置将请求正确重定向到适当的服务。前端应用程序只能与此组件通信。
链接:
https://martinfowler.com/eaaCatalog/gateway.html
我想知道怎么做
GraphQl
你能处理这种模式吗?
如果我们有一个模式,我们如何实现这个模式
GraphQl
每个微服务的端点?
回答-编辑:
在我的项目中,有架构,然后是网关,然后
zuul
将其发送给另一个(它通过
URL
(根据要求)。
GraphQl
一个端点是这样吗
祖尔
行不通。
所以我们只有两个步骤(总是可以检查)
zipkin
例如)比如:
Gateway microservice
->
Microservice X
关于:
也许您可以实现另一个GraphQL API来整合这些功能
微服务的GraphQL API
我就是这么想的。
仅在我的项目中
API gateway
将提供给
internet
.
但在这种情况下,我想知道我们是否得到了,5
queries
微服务
A
和3
询问
微服务
B
我如何在这个微服务网关中传递它们——我不想一块一块地剪切它,所以我将从它向微服务B发送一个接一个(总计3个)的查询——但一次发送3个。
微服务A->我想从
graphQL
一枪。
如果我只使用这些:
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>4.0.0</version> <!--5.0.2 http://localhost:8999/graphiql fails to load-->
</dependency>
然后进来
microservice X
我得到了schema和一些查询,比如:
type Query {
getAllItems: [TestEntity]
getDataTypes: [DictionaryType]
(...)
}
在控制器中,我有:
private DataFetcher<List<TestEntity>> allDictionaryItemsFetcher;
private DataFetcher<Set<DictionaryType>> dictionaryTypeFetcher;
@Value("classpath:test.graphqls")
private Resource schemaResource;
private GraphQL graphQL;
(...)
allDictionaryItemsFetcher = dataFetchingEnvironment -> dictionaryService.getAllDictionaryItemsAsStrings();
dictionaryTypeFetcher = dataFetchingEnvironment -> dictionaryService.getDictionaryTypes();
@PostConstruct
private void loadSchema() throws IOException {
File schemaFile = schemaResource.getFile();
TypeDefinitionRegistry registry = new SchemaParser().parse(schemaFile);
RuntimeWiring wiring = buildWiring();
GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(registry, wiring);
graphQL = GraphQL.newGraphQL(schema).build();
}
private RuntimeWiring buildWiring() {
return RuntimeWiring.newRuntimeWiring()
.type("Query", typeWriting -> typeWriting
.dataFetcher("getAllItems", allDictionaryItemsFetcher)
.dataFetcher("getDataTypes", dictionaryTypeFetcher)
)
.build();
}
那么如果我们
网关微服务
同样依赖于
GraphQl
我们会在
schema
:
type Query {
getAllItems: [TestEntity] # from microservice A
getDataTypes: [DictionaryType] # from microservice A
(...) # Other from microservice A,B,C,(...)
}
然后如果用户发送
one request
抓住我
getAllItems
和
getDataTypes
从…起
Microserivce A
得到
Z
resources
从…起
microservice B
如何发送两个查询:
首先是
getAllItems
和
getDataTypes
到
Microservice A
第二
Z
请求
微服务B
?
我怎样才能分开
GraphQL
这样吗?
我不想一个接一个地发送reuqests,例如当我收到:
抓住我
getAllItems
和
getDataTypes
从…起
微球菌A
我不想打两次电话
微服务
一旦与:
getAllItems
第二次是
getDataTypes
.
我怎样才能轻松地通过
microservice
只有
例如制造许多
schemas
(每人一个)
microservice) in
GraphQL网关
and
配置
one endpoint with many
-可能吗?或者其他解决方法?
也许是因为我的误会
GraphQL
但我认为
case
上面我们必须配置一个
GraphQl
每
微服务
在里面
java
.
我不想要一个
GraphQL gateway
射向
微服务X
经典的
REST
api(不是
GraphQL
)例如,因为我们失去了很多东西
fetching optimization
请看这里:
https://youtu.be/1zIHHi2MaQE?t=1369
或制造
N
请求而不是
one
具体化
微服务X