Spring Boot2.0實現微服務調用

微服務相互調用可避免跨域問題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>