微服務相互調用可避免跨域問題web
調用兩種方式
1.RestTemplate
底層採用httpclient的技術,屬於spring boot,是spring boot 默認採用的rebbon服務調用。
2.Fegin(建議)
屬於spring cloudspring
====================================================================跨域
RestTemplate:springboot
1app 2負載均衡 3微服務 4this 5url 6rest 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> |