加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

如何使用Spring Cloud构建微服务架构?

发布时间:2018-08-15 09:40:42 所属栏目:教程 来源:张逸
导读:【资讯】微处事架构模式的焦点在于怎样辨认处事的界线,计划出公道的微处事。 但假如要将微处事架构运用到出产项目上,而且可以或许施展该架构模式的重要浸染,则必要微处事框架的支持。 在 Java 生态圈,今朝行使较多的微处事框架就是集成了包罗 Netflix OSS

  @EnableDiscoveryClient @SpringBootApplication public class ConsumerApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args) } }

  假设斲丧 demo-service 的客户端代码写在 demo-consumer 处事的个中一个 Controller 中:

  @RestController public class ConsumerController { @Autowired RestTemplate restTemplate; @RequestMapping(value = "/demo-consumer", method = RequestMethod.Get) public String helloConsumer() { return restTemplate.getForEntity("http://demo-service/demo", String.class).getBody(); } }

  通过 RestTemplate 就可以提倡对 demo-service 的斲丧挪用。

  声明式处事挪用

  通过 Ribbon 和 Hystrix 可以实现对微处事的挪用以及容错掩护,但 Spring Cloud 还提供了另一种更简朴的声明式处事挪用方法,即 Spring Cloud Feign。

  Feign 现实上就是对 Ribbon 与 Hystrix 的进一步封装。通过 Feign,我们只需建设一个接口并用 annotation 的方法设置,就可以完成对处事供给方的接口(REST API)绑定。

  假设我们有三个处事:

  Notification Service

  Account Service

  Statistics Service

  处事之间的依靠相关如下图所示:

  怎样行使Spring Cloud构建微处事架构?

  要行使 Feign 来完成声明式的处事挪用,必要在作为挪用者的处事中建设 Client。

  Client 通过 Eureka Server 挪用注册的对应处事,这样可以扫除处事之间的耦合。

  布局如下图所示:

  怎样行使Spring Cloud构建微处事架构?

  为了行使 Feign,必要对应微处事的 pom.xml 文件中添加如下依靠:

  <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>

  同时,还必要在被斲丧的微处事 Application 中添加 @EnableFeignClients 注解。

  譬喻在 Statistics 处事的应用措施类中:

  @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class StatisticsApplication { public static void main(String[] args) { SpringApplication.run(StatisticsApplication.class, args); } }

  因为 Account 处事必要挪用 Statistics 处事,因此必要在 Account 处事项目中增进对应的 Client 接口:

  @FeignClient(name = "statistics-service") public interface StatisticsServiceClient { @RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) void updateStatistics(@PathVariable("accountName") String accountName, Account account); }

  StatisticsServiceClient 接口的 updateStatistics() 要了解挪用 URI 为 /statistics/{accountName} 的 REST 处事,且 HTTP 动词为 put。

  这个处事对应的就是 Statistics Service 中 StatisticsController 类中的 saveStatistics() 要领:

  @RestController public class StatisticsController { @Autowired private StatisticsService statisticsService; @RequestMapping(value = "/{accountName}", method = RequestMethod.PUT) public void saveStatistics(@PathVariable String accountName, @Valid @RequestBody Account account) { statisticsService.save(accountName, account); } }

  在 Account 处事中,假如要挪用 Statistics 处事,都应该通过 StatisticsServiceClient 接口举办挪用。

  譬喻,Account 处事中的 AccountServiceImpl 要挪用 updateStatistics() 要领,就可以在该类的实现中通过 @autowired 注入 StatisticsServiceClient 接口:

  @Service public class AccountServiceImpl implements AccountService { @Autowired private StatisticsServiceClient statisticsClient; @Autowired private AccountRepository repository; @Override public void saveChanges(String name, Account update) { //... statisticsClient.updateStatistics(name, account); } }

  Notification 处事对 Account 处事的挪用如法炮制。

  处事容错掩护

  在微处事架构中,微处事之间也许存在依靠相关,譬喻 Notification Service 会挪用 Account Service,Account Service 挪用 Statistics Service。

  真实产物中,微处事之间的挪用会越发通俗。倘若上游处事呈现了妨碍,就也许会由于依靠相关而导致妨碍的伸张,最终导致整个体系的瘫痪。

  Spring Cloud Hystrix 通过实现断路器(Circuit Breaker)模式以及线程断绝等成果,实现处事的容错掩护。

  如故参考前面的例子,此刻体系的微处事包罗:

  上游处事:demo-service

  下流处事:demo-consumer

  Eureka 处事器:eureka-server

  假设上游处事也许会呈现妨碍,为担保体系的结实性,必要在下流处事中插手容错包括成果。

  起首必要在 demo-consumer 处事中添加对 Hystrix 的依靠:

  <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>

  然后在 demo-consumer 的应用措施类中插手 @EnableCircuitBreaker 开启断路器成果:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读