springcloud——服務註冊與發現

本節摘要

  • 註冊中心搭建euraka
  • 服務註冊與發現
  • springcloud客戶端調用:rest、feign
  • 負載均衡:ribbon
  • zuul接口網關

搭建euraka註冊中心

1、搭建項目環境

創建springboot pom 項目
pom.xml依賴配置如下:

  <groupId>com.link</groupId>
    <artifactId>springcloud01</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2、創建eureka註冊中心

  • 修改pom.xml依賴
    <groupId>com.link</groupId>
    <artifactId>eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>com.link</groupId>
        <artifactId>springcloud01</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

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

  • 配置eureka服務信息
# 註冊中心端口
server:
  port: 8888

# 應用名稱
spring:
  application:
    name: eurka-server

eureka:
  instance:
    hostname: localhost
  client:
    # 禁止自己當做服務註冊
    registerWithEureka: false
    # 屏蔽註冊信息
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  • 添加啓動註解
    在這裏插入圖片描述

啓動服務,如圖所示沒有註冊的服務
在這裏插入圖片描述

3、服務註冊

  • 配置pom.xml
   <groupId>com.link</groupId>
    <artifactId>client</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>client</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>com.link</groupId>
        <artifactId>springcloud01</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

  • 修改配置文件
# 服務提供者端口
server:
  port: 8881

spring:
  application:
    name: server-client

eureka:
  client:
    serviceUrl:
      #  註冊中心地址
      defaultZone: http://localhost:8888/eureka/
  • 提供服務

啓動類加入註解:
@SpringBootApplication
@EnableEurekaClient

// 添加服務

@RestController
public class ClientController {

    @RequestMapping("/getUserList")
    public List<String> getUserList() {
        List<String> listUser = new ArrayList<String>();
        listUser.add("link");
        listUser.add("23");
        listUser.add("xiamen");
        return listUser;
    }
}

在這裏插入圖片描述

4、服務消費

ribbon是一個負載均衡客戶端 類似nginx反向代理,
可以很好的控制htt和tcp的一些行爲。
Feign默認集成了ribbon。

方式1:ribbon
  • 配置pom依賴
  	<groupId>com.link</groupId>
    <artifactId>order</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>order</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>com.link</groupId>
        <artifactId>springcloud01</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--ribbon+rest => feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
    </dependencies>
  • 修改配置
server:
  port: 8883
spring:
  application:
    name: consumer-ribbon


eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
  • 配置啓動類

@EnableDiscoveryClient和@EnableEurekaClient作用:
都是能夠讓註冊中心能夠發現,掃描到改服務。
@EnableEurekaClient只適用於Eureka作爲註冊中心
@EnableDiscoveryClient 可以是其他註冊中心。

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 開啓負載均衡
     * @return
     */
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

  • 編寫controller調用服務
@RestController
public class ConsumerController {

    @Autowired
    RestTemplate restTemplate;


    @RequestMapping("/getUserList")
    public List<String> hiService() {
    	// 服務地址+接口
        return restTemplate.getForObject("http://server-client/getUserList", List.class);
    }

在這裏插入圖片描述

  • 測試調用
    在這裏插入圖片描述
方式2:feign
  • 添加依賴
 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
  • 修改配置
server:
  port: 8883
spring:
  application:
    name: service-feign
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
  • 服務調用(接口配置方式)
@FeignClient(value = "server-client")
public interface UserInfo{

    /**
     * 服務接口
     * @return
     */
    @RequestMapping(value = "/getUserList")
    List<String> getUserList();

}

@RestController
public class Controller {

    @Autowired
    UserInfo userInfo;

    @GetMapping(value = "/getUserList")
    public List<String> getUserList() {
        return userInfo.getUserList();
    }

}

// 啓動類配置:
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class Application {}

在這裏插入圖片描述

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