spring-cloud Hoxton.SR2版 服務註冊與發現--zookeeper搭建以及遠程調用(openfeign)使用

spring-cloud Hoxton.SR2版 服務註冊與發現–zookeeper搭建以及遠程調用(openfeign)使用


本地項目的基礎環境

環境 版本
jdk 1.8.0_201
maven 3.6.0
Spring-boot 2.2.4.RELEASE
Spring-cloud Hoxton.SR2
zookeeper 3.5

1、zookeeper的搭建

1.1、linux環境下搭建

詳細搭建,可以參考

《linux下安裝zookeeper》

《zookeeper在linux下的集羣搭建》

1.2、docker搭建

爲了簡單方便的快速搭建,本次使用的zookeeper,將使用docker搭建;

spring-cloud 版本使用的Hoxton.SR2;對應的zookeeper版本jar包爲zookeeper-3.5.3-beta.jar;docker下載的版本爲3.5;

如果在搭建過程中,出現一些報錯信息,也可以檢查下zookeeper的jar包以及對應的版本的問題;

1、下載docker的zookeeper鏡像對應的版本;

docker pull zookeeper:3.5

2、創建一個zookeeper鏡像的容器,並啓動

docker run --name zookeeper_01 -p 2181:2181 --restart always -d zookeeper:3.5

3、查看zookeeper容器啓動情況

docker ps

具體的可以參考《docker-hub》;上面也有具體的docker-compose腳本,啓動集羣的方式等;

2、項目搭建–服務的提供者badger-spring-cloud-zk-api

2.1、maven的pom文件如下:主要spring-cloud-starter-zookeeper-discovery這個包

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.badger</groupId>
    <artifactId>badger-spring-cloud-zk-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>badger-spring-cloud-zk-api</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
        <spring-cloud.version>Hoxton.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>
</project>

2.2、springboot主類如下

@SpringBootApplication
@EnableDiscoveryClient
public class ZookeeperApiApplication {

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

@EnableDiscoveryClient註解:是開啓自動註冊;

2.3、controller業務類

@RestController
public class DemoController {

    @Value("${server.port}")
    String port;

    @Value("${spring.cloud.client.ip-address}")
    String address;

    @GetMapping("/zk/demo")
    public String demo() {
        return "我的地址是-->" + address + ":" + port;
    }
}

2.4、application.yml配置文件如下

server:
  port: 7000
spring:
  application:
    name: badger-spring-cloud-zk-api
  cloud:
    zookeeper:
      discovery:
        uri-spec: 127.0.0.1:2181

更詳細的配置內容可以參考org.springframework.cloud.zookeeper.discovery.ZookeeperDiscoveryProperties.class配置類;

集羣配置,url-spec對應的IP和端口,用分隔;

3、項目搭建–服務的調用者badger-spring-cloud-zk-openfeign

3.1、maven的pom文件如下:同樣需要spring-cloud-starter-zookeeper-discovery這個包

當前案例,主要演示使用openfeign作爲遠程調用;單獨使用ribbon調用就不再單獨演示了;

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.badger</groupId>
    <artifactId>badger-spring-cloud-zk-openfeign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>badger-spring-cloud-zk-openfeign</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
        <spring-cloud.version>Hoxton.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>
</project>

3.2、springboot主類如下

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class ZookeeperOpenfeignApplication {

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

}

3.3、openFeign遠程調用的接口

/**
 * feign接口 指定調用哪個接口 
 * 註解:@FeignClient 標註爲feign接口 value 指向調用的模塊名
 * spring boot 2.0 只有一個服務端(value = "同一個名字"),只能寫一個註解,
 * 可以使用contextId 作爲區分,而寫多個@FeignClient
 * @author liqi ,
 */
@FeignClient(value = "badger-spring-cloud-zk-api")
public interface DemoFeignApi {

    @GetMapping("/zk/demo")
    String demo();
}

注意:@FeignClient(value = "badger-spring-cloud-zk-api");value屬性badger-spring-cloud-zk-api

使用Eureka作爲註冊中心,在註冊中,顯示的是大寫,然後配置的時候,需要大寫;

使用zookeeper作爲註冊中心,在註冊中,顯示的是小寫,那麼在配置的時候,也需要小寫

3.4、controller業務類

@RestController
public class DemoController {
    @Autowired(required = false)
    DemoFeignApi api;

    @GetMapping("/zk/feign/demo")
    public String demo() {
        return api.demo();
    }
}

3.5、application.yml配置文件如下

server:
  port: 8000
spring:
  application:
    name: badger-spring-cloud-zk-openfeign
  cloud:
    loadbalancer:
      ribbon:
        enabled: true
    zookeeper:
      discovery:
        uri-spec: 127.0.0.1:2181

4、測試

1、啓動應用服務的提供者badger-spring-cloud-zk-api端口爲7000;

http://localhost:7000/zk/demo

訪問結果:我的地址是-->172.16.2.54:7000

2、啓動應用服務的調用者badger-spring-cloud-zk-openfeign端口爲8000;

http://localhost:8000/zk/feign/demo

訪問結果:我的地址是-->172.16.2.54:7000

如果需要負載均衡測試,那麼服務提供者,使用不用的端口,多啓動幾個服務就可以了;

具體代碼信息,可以查看《碼雲》

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