spring-cloud Hoxton.SR2版 服务注册与发现--consul搭建以及远程调用(openfeign)使用

spring-cloud Hoxton.SR2版 服务注册与发现–consul搭建以及远程调用(openfeign)使用

文章目录

  • spring-cloud Hoxton.SR2版 服务注册与发现--consul搭建以及远程调用(openfeign)使用
    • 1、consul的简介以及搭建
      • 1.1、consul简介
      • 1.2、docker搭建
    • 2、项目搭建--服务的提供者badger-spring-cloud-consul-api
      • 2.1、maven的pom文件如下:主要spring-cloud-starter-consul-discovery这个包
      • 2.2、springboot主类,以及controller请求;如下
      • 2.3、application.yml配置文件如下
    • 3、项目搭建--服务的调用者badger-spring-cloud-consul-openfeign
      • 3.1、maven的pom文件如下:同样需要spring-cloud-starter-consul-discovery这个包
      • 3.2、springboot主类如下
      • 3.3、openFeign远程调用的接口
      • 3.4、controller业务类
      • 3.5、application.yml配置文件如下
    • 4、测试
      • 1、启动应用`服务的提供者badger-spring-cloud-consul-api`端口为7000;
      • 2、启动应用`服务的调用者badger-spring-cloud-consul-openfeign`端口为8000;

本地项目的基础环境

环境 版本
jdk 1.8.0_201
maven 3.6.0
Spring-boot 2.2.4.RELEASE
Spring-cloud Hoxton.SR2
Consul 1.4.5

1、consul的简介以及搭建

1.1、consul简介

consul是一套开源的分布式服务发现和配置管理系统,有HashiCorp公司用go语言开发;

提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中,可以根据需要单独使用,也可以构建一个全方位的服务网络;

主要可以作为:

1、服务发现;

2、健康检查;

3、KV存储;

4、多数据中心;

更详细的可以查看spring 网站介绍https://spring.io/projects/spring-cloud-consul

当然,也可以通过官网查看https://www.consul.io/

再使用过程中,也可以参看《spring-cloud中文网》

spring-cloud Hoxton.SR2版 服务注册与发现--consul搭建以及远程调用(openfeign)使用_第1张图片

1.2、docker搭建

为了简单方便的快速搭建,本次使用的consul,将使用docker搭建;如果需要使用其他的法式搭建,可以查看《consul的官网》下载对应操作系统的文件;

spring-cloud 版本使用的Hoxton.SR2;对应的consul版本jar包为consul-api-1.4.1.jar;docker下载的版本为1.4.5;

如果在搭建过程中,出现一些报错信息,也可以检查下consul的jar包以及对应的版本的问题;

1、下载docker的consul镜像对应的版本;

docker pull consul:1.4.5
spring-cloud Hoxton.SR2版 服务注册与发现--consul搭建以及远程调用(openfeign)使用_第2张图片

2、创建一个consul镜像的容器,并启动

docker run -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 -p 8500:8500 consul:1.4.5

3、查看consul容器启动情况

docker ps

具体的可以参考《docker-hub》;

4、查看consul的服务启动情况

访问网页http://localhost:8500;可以看到如下网站,就是正常启动了;

spring-cloud Hoxton.SR2版 服务注册与发现--consul搭建以及远程调用(openfeign)使用_第3张图片

2、项目搭建–服务的提供者badger-spring-cloud-consul-api

2.1、maven的pom文件如下:主要spring-cloud-starter-consul-discovery这个包


<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.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.2.4.RELEASEversion>
        <relativePath /> 
    parent>
    <groupId>com.badgergroupId>
    <artifactId>badger-spring-cloud-consul-apiartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>badger-spring-cloud-consul-apiname>
    <description>Demo project for Spring Bootdescription>

    <properties>
        <java.version>1.8java.version>
        <maven-jar-plugin.version>3.1.1maven-jar-plugin.version>
        <spring-cloud.version>Hoxton.SR2spring-cloud.version>
    properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
         <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-consul-discoveryartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>
project>

2.2、springboot主类,以及controller请求;如下

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ConsulApiApplication {

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

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

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

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

}

@EnableDiscoveryClient注解:是开启自动注册;

2.3、application.yml配置文件如下

server:
  port: 7000
spring:
  application:
    name: badger-spring-cloud-consul-api
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        prefer-ip-address: true

更详细的配置内容可以参考 org.springframework.cloud.consul.ConsulProperties.class以及org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.class这两个配置类的成员属性

3、项目搭建–服务的调用者badger-spring-cloud-consul-openfeign

3.1、maven的pom文件如下:同样需要spring-cloud-starter-consul-discovery这个包

当前案例,主要演示使用openfeign作为远程调用;单独使用ribbon调用就不再单独演示了;


<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.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.2.4.RELEASEversion>
        <relativePath /> 
    parent>
    <groupId>com.badgergroupId>
    <artifactId>badger-spring-cloud-consul-openfeignartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>badger-spring-cloud-consul-openfeignname>
    <description>Demo project for Spring Bootdescription>

    <properties>
        <java.version>1.8java.version>
        <maven-jar-plugin.version>3.1.1maven-jar-plugin.version>
        <spring-cloud.version>Hoxton.SR2spring-cloud.version>
    properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-consul-discoveryartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>
project>

3.2、springboot主类如下

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class ConsulOpenfeignApplication {

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

}

需要加 @EnableDiscoveryClient注解,把当前服务注册到注册中心中

3.3、openFeign远程调用的接口

/**
 * feign接口 指定调用哪个接口 
 * 注解:@FeignClient 标注为feign接口 value 指向调用的模块名
 * spring boot 2.0 只有一个服务端(value = "同一个名字"),只能写一个注解,
 * 可以使用contextId 作为区分,而写多个@FeignClient
 * @author liqi ,
 */
@FeignClient(value = "badger-spring-cloud-consul-api")
public interface DemoFeignApi {

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

使用consul作为注册中心,@FeignClient(value = "badger-spring-cloud-consul-api")中,value属性,大小写都可以;

3.4、controller业务类

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

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

3.5、application.yml配置文件如下

server:
  port: 8000
spring:
  application:
    name: badger-spring-cloud-consul-openfeign
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        prefer-ip-address: true

4、测试

1、启动应用服务的提供者badger-spring-cloud-consul-api端口为7000;

http://localhost:7000/consul/demo

访问结果:我的地址是-->172.16.2.54:7000

2、启动应用服务的调用者badger-spring-cloud-consul-openfeign端口为8000;

http://localhost:8000/consul/feign/demo

访问结果:我的地址是-->172.16.2.54:7000

如果需要负载均衡测试,那么服务提供者,使用不用的端口,多启动几个服务就可以了;

具体代码信息,可以查看《码云》

你可能感兴趣的:(springcloud)