Spring boot Spring Boot-如何在微服务之间通信?
我目前正在从事一个SpringBoot微服务项目。我已经创建了服务,每个服务都单独运行。这样,我需要一些服务来与其他服务通信。我怎样才能做到这一点Spring boot Spring Boot-如何在微服务之间通信?,spring-boot,microservices,Spring Boot,Microservices,我目前正在从事一个SpringBoot微服务项目。我已经创建了服务,每个服务都单独运行。这样,我需要一些服务来与其他服务通信。我怎样才能做到这一点 我看到一些关于这方面的博客,它们使用Netflix、Eureka云服务器来实现这一点。在我的本地环境中,是否有任何方法可以在不使用云服务器的情况下实现这一点?正如@g00glen00b在评论中提到的那样,Eureka不用于微服务之间的通信。它用于服务发现。 我知道有两种方法可以让您与其他微服务进行通信: RestTemplate 假客户 RestTe
我看到一些关于这方面的博客,它们使用Netflix、Eureka云服务器来实现这一点。在我的本地环境中,是否有任何方法可以在不使用云服务器的情况下实现这一点?正如@g00glen00b在评论中提到的那样,Eureka不用于微服务之间的通信。它用于服务发现。 我知道有两种方法可以让您与其他微服务进行通信:
看看这个 于2018年11月21日12:41 GMT编辑 假设您的第一个(琐碎的)微服务(纯rest服务)正在您的PC上端口8091下运行 在第二个(普通)微服务的控制器中,使用RestTemplate.getForEntity(url、responseType、uriVariables)调用第一个服务,如链接教程中的示例所示:
ResponseEntity<CurrencyConversionBean> responseEntity =
new RestTemplate().getForEntity(
"http://localhost:8091/currency-exchange/from/{from}/to/{to}", CurrencyConversionBean.class, uriVariables);
ResponseEntity ResponseEntity=
新建RestTemplate().getForEntity(
"http://localhost:8091/currency-交换/from/{from}/to/{to}”,CurrencyConversionBean.class,uriVariables);
在哪里
url:您的第一个(微)(rest)服务的url。
responseType:作为响应等待的对象的类/类型。
uriVariables:是一个包含URI模板变量的映射 微服务之间有不同的通信方式。但是使用哪一个:取决于用例
Api调用
:即使用restemplate
,假装客户端
等对其他服务进行实际的restapi调用李>
订单
数据库中还有客户名称
和其他详细信息。客户更新其姓名后,您还必须更新订单数据库中的详细信息。如何做到这一点。通过API调用
?如果帐户微服务也需要此更新,该怎么办。所以RESTAPI将是一个开销。在这个用例中,我们可以像RabbitMQ
一样使用MessageQueues
。Customer microservice将创建一个Customer update事件,microservice对此感兴趣的用户可以订阅该事件尽管REST很熟悉,因此易于实现,但如果您需要更灵活和类似Java的通信,Spring的(Spring-to-Spring)
HTTP Invoker
可能是一个不错的选择
如果您需要基于HTTP的远程处理,Spring的HTTP调用程序是一个不错的选择
但也依赖于Java序列化。它共享基本的
具有RMI调用程序的基础架构,仅使用HTTP作为传输。注
HTTP调用程序不仅限于Java到Java远程处理,而且
也可以在客户端和服务器端使用Spring。(后者也是如此。)
适用于非RMI接口的Spring的RMI调用程序。)
一切都好。这取决于您的选择,您希望在服务之间进行同步通信还是异步通信。 对于同步服务,您可以使用以下任一第三方
ResponseEntity<CurrencyConversionBean> responseEntity =
new RestTemplate().getForEntity(
"http://localhost:8091/currency-exchange/from/{from}/to/{to}", CurrencyConversionBean.class, uriVariables);
ResponseType obj= new RestTemplate().getForObject(URL, ResponseType.class, params);
@Autowired
private RestTemplate restTemplate;
@Autowired
private EurekaClient eurekaClient;
@RequestMapping("/dashboard/{myself}")
public EmployeeInfo findme(@PathVariable Long myself) {
Application application = eurekaClient.getApplication(employeeSearchServiceId);
InstanceInfo instanceInfo = application.getInstances().get(0);
String url = "http://" + instanceInfo.getIPAddr() + ":" + instanceInfo.getPort() + "/" + "employee/find/" + myself;
System.out.println("URL" + url);
EmployeeInfo emp = restTemplate.getForObject(url, EmployeeInfo.class);
System.out.println("RESPONSE " + emp);
return emp;
}