【Spring Cloud 筆記和總結】三、服務提供與消費和實現客戶端負載均衡

一、簡介

註冊中心Eureka架構圖如下:
在這裏插入圖片描述
分別是註冊中心(Eureka)、服務提供(Service Provider)和服務消費(Service Consumer),後兩者均爲註冊到註冊中心的服務,因調用關係不同而身份不同,不同的業務場景下身份可能會互換。

二、主要內容

1、服務提供者

結構如下:
在這裏插入圖片描述
HelloController添加註解@RestController,核心代碼如下

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String index(String name) {
        return "hello "+name+",this is first messge";
    }
    @RequestMapping(value = "/foo")
    public String foo(String foo) {
        return "hello "+foo+",this is first messge";
    }

application.yml配置文件

spring:
    application:
        name: spring-cloud-provider
server:
    port: 9000
eureka:
    client:
        serviceUrl:
            defaultZone: http://localhost:8000/eureka/

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.lxt</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.lxt</groupId>
    <artifactId>service-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-provider</name>
    <description>Demo project for Spring Boot</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
</project>

2、服務消費者

結構如下,暫時忽略hystrix
在這裏插入圖片描述
HelloRemote代碼

@Component
public class HelloRest {

    @Autowired
    private RestTemplate restTemplate;

    public String hello(String name){
        String response = restTemplate.getForObject("http://spring-cloud-provider/foo?foo="+name,String.class);
        return response;
    }


    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }


}

ConsumerController核心代碼

@RestController
public class ConsumerController {
    @Autowired
    private HelloRest helloRest;

    @RequestMapping("/hello/{name}")
    public String index(@PathVariable("name") String name) {
        return helloRest.hello(name);
    }
    @RequestMapping("/test")
    public String test() {
        return "test success!";
    }
}

application.yml配文件

spring:
    application:
        name: spring-cloud-consumer
server:
    port: 9001
eureka:
    client:
        serviceUrl:
            defaultZone: http://localhost:8000/eureka/

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.lxt</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.lxt</groupId>
    <artifactId>service-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-consumer</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
</project>

三、結果演示

  • 分別啓動註冊中心、服務提供者和服務消費者,如下圖
    在這裏插入圖片描述
  • 調用服務消費者測試
    - 瀏覽器輸入http://localhost:9001/hello/lxt
    - 返回hello lxt,this is first messge,測試成功

四、整合Feign實現負載均衡

簡介

Fegin是Netfix開發的聲明式、模板化的HTTP客戶端,Spring Cloud 對Fegin進行了增強,使Fegin支持了Spring MVC註解,並整合了Ribbon和Eureka,從而讓Fegin的使用更加方便。

Ribbon是基於Netfix發佈的客戶端負載均衡器,默認提供了輪詢、隨機等負載均衡算法,開發者也可以自定義負載均衡算法。

Eureka Server 和 Fegin整合使用大致架構如下
在這裏插入圖片描述
實現負載均衡

  • 依賴

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
  • 啓動類添加註解@EnableFeignClients啓用feign進行遠程調用

    @SpringBootApplication
    @EnableDiscoveryClient//啓用服務註冊與發現
    @EnableFeignClients//啓用feign進行遠程調用
    public class ServiceConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceConsumerApplication.class, args);
        }
    
    }
    
  • 使用@FeignClient實現負載均衡

    // name:配置服務提供者名稱,用於從註冊中心獲取服務提供者信息
    @FeignClient(name= "spring-cloud-provider")
    public interface HelloFegin {
        @RequestMapping(value = "/hello")
        public String hello(@RequestParam(value = "name") String name);
    
    }
    
  • 複製service-provider,重命名service-provider1

  • 修改配置文件端口爲9002

  • 修改HelloController.index返回值爲"hello "+name+",this is two messge"
    如下圖:
    在這裏插入圖片描述

  • 註冊中心
    在這裏插入圖片描述

  • 多次測試http://localhost:9001/hello/lxt分別返回hello lxt,this is first messgehello lxt,this is two messge

五、相關

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章