快捷搜索: 王者荣耀 脱发

Spring Boot2.0实现微服务调用

微服务相互调用可避免跨域问题

调用两种方式 1.RestTemplate 底层采用httpclient的技术,属于spring boot,是spring boot 默认采用的rebbon服务调用。 2.Fegin(建议) 属于spring cloud

====================================================================

RestTemplate:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 控制器 @RestController public class OrderController { //RestTemplate 是springboot 提供的web组件,底层用的httpclient技术 @Autowired private RestTemplate restTemplate; ** @RequestMapping("/getmerber") public String getmerber(){ //String url = "http://localhost:2001/index"; //方式一:直接调用,一般不采用 //方式二:使用服务别名去注册中心获取对应的服务调用地址 //注意这里用的是服务别名,需要开启 “注册中心” 和在启动文件添加@LoadBalanced注解 String url="http://Merber/index"; return restTemplate.getForObject(url,String.class); ** } } ============================ 启动文件添加注入RestTemplate @Bean ** @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } 添加@LoadBalaced可以 使用服务名字查找注册中心的地址,从而达到实现微服务调用。 如果要调用的微服务有两个端口号(有一个备用服务),即可实现负载均衡。

Fegin:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 服务提供者:提供对应的接口实现方法 服务消费者:创建对应的方法接口(表明指向服务提供者),并在控制器中调用 ======================================= 服务提供者: 创建控制器(实现接口内容) @RestController public class HelloController { ****** @GetMapping("/hello/{name}") public String index(@PathVariable String name){ return "this is admin ,hello!" + name; } } -------------------- 入口文件 @SpringBootApplication @EnableEurekaClient public class AmncloudAdminApplication { public static void main(String[] args) { SpringApplication.run(AmncloudAdminApplication.class, args); } } ----------------- pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ====================================================== 服务消费者: 接口 @FeignClient(name= "amncloud-admin") ******重点 public interface HelloRemote { @GetMapping("/hello/{name}") public String hello(@PathVariable("name") String name); } ------------------------ 控制器 @RestController public class UcenterController { @Autowired ******重点 HelloRemote helloRemote; @GetMapping("/hello/{name}") public String index(@PathVariable("name") String name) { return helloRemote.hello(name); } } ------------------------- 入口文件 @SpringBootApplication @EnableFeignClients #注意与服务提供者的不同*********重点 @EnableDiscoveryClient public class AmncloudUcenterApplication { public static void main(String[] args) { SpringApplication.run(AmncloudUcenterApplication.class, args); } } ------------------- pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
经验分享 程序员 微信小程序 职场和发展