【发布时间】:2016-06-09 21:28:15
【问题描述】:
我有一个企业服务总线 (ESB),它通过 Rest 将数据发布到微服务 (MCS)。我使用 Spring 来执行此操作。主要问题是我有 6 个微服务,一个接一个地运行。所以它看起来像这样:MCS1 -> ESB -> MCS2 -> ESB -> ... -> MCS6
所以我的问题看起来像这样:(ESB)
@RequestMapping(value = "/rawdataservice/container", method = RequestMethod.POST)
@Produces(MediaType.APPLICATION_JSON)
public void rawContainer(@RequestBody Container c)
{
// Here i want to do something to directly send a response and afterwards execute the
// heavy code
// In the heavy code is a postForObject to the next Microservice
}
服务会做这样的事情:
@RequestMapping(value = "/container", method = RequestMethod.POST)
public void addDomain(@RequestBody Container container)
{
heavyCode();
RestTemplate rt = new RestTemplate();
rt.postForObject("http://134.61.64.201:8080/rest/rawdataservice/container",container, Container.class);
}
但我不知道该怎么做。我在帖子中查找了 Location 方法,但我认为它不能解决问题。
编辑: 我有一个微服务链。第一个微服务等待 ESB 的响应。在响应中,ESB 发布到另一个微服务并等待响应,下一个与第一个相同。所以问题是只要完成了完整的微服务路由,第一个微服务就被阻塞了。
ESB Route 也许一张照片可以帮助。 1.rawdataService 2.metadataservice 3.syntaxservice 4.semantik
【问题讨论】:
-
我不确定我是否理解这个问题。是不是你无法确定从微服务发帖到哪里
-
在我看来,您希望异步运行您的请求,以免您的请求被阻止。假设您有两个微服务 A + B,您可以并行/异步向两个微服务 A + B 发起请求。但是,这并不总是可行的,即在需要来自 A 的响应作为 B 的输入的情况下。
-
异步有助于在不阻塞的情况下运行请求,但链的主要问题没有解决。我不想要链条,系统没有必要。微服务 A 不需要微服务 B 完成流程的信息。微服务 A 只需要数据成功发送到 ESB 的信息即可