微服务相互调用可避免跨域问题
调用两种方式
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
====================================================== 服务消费者: 接口
@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
|