美文网首页idea
微服务eureka, ribbon,zookeeper,cons

微服务eureka, ribbon,zookeeper,cons

作者: 刘小刀tina | 来源:发表于2020-03-09 23:13 被阅读0次
image.png image.png image.png image.png image.png image.png image.png

支持注解


image.png image.png

热部署分为五步 :

  1. jar 包
    添加依赖
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
    </dependency>

2.添加插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
</dependencies>
</plugin>

  1. 修改配置


4.command + SHIFT + A --> 查找Registry --> 找到打钩


image.png
  1. 重启idea
image.png

1. Sprint cloud 集成 eureka 注册中

image.png image.png image.png image.png

1-1.eureka 服务端

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

        <!--    引入自定义的api通用包,可以使用Payment支付Entity    -->
        <dependency>
            <artifactId>springcloud-api-common</artifactId>
            <groupId>com.tina.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>


        <!-- boot web actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--  一般通用配置  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--  热部署      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--   单元测试     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
============================================================

@SpringBootApplication//表明是一个启动类 相当于@Configuration + @EnableAutoConfiguration+@ComponentScan
@EnableEurekaServer //表明是eureka的服务方
public class Eureka7001Application {

    public static void main(String[] args) {

        SpringApplication.run(Eureka7001Application.class,args);
    }
}
============================================================

server:
  port: 7001

spring:
  application:
    name: springcloud-eureka-server7001
eureka:
  instance:
    hostname: springcloud-eureka-server7001   #eureka服务端的实例名称
  client:
    register-with-eureka: false   #false表示不向注册中心注册自己
    fetch-registry: false   #false表示自己端就是注册中心
    service-url:
      #defaultZone: http://eureka7001.com:7001/eureka/   #单机
       defaultZone: http://springcloud-eureka-server7002:7002/eureka/  #集群
  server:
    # 关闭自我保护机制,保证不可用服务被及时剔除
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 2000


1-2.eureka client

a) provier
 <dependencies>

      <!--  springboot 2.2.2    -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!--  springcloud cloud Hoxton.SR1   -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!--  springcloud cloud alibaba 2.1.0.RELEASE    -->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
      </dependency>

      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
      </dependency>

      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot.version}</version>
      </dependency>


      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
      </dependency>

      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
      </dependency>

      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <optional>true</optional>
      </dependency>

    </dependencies>
============================================================
#设置端口号
server:
  port: 8003


##设置name
spring:
  #配置热部署
  devtools:
    restart:
      enabled: true
  application:
    name: springcloud-payment-service

  #配置mysql数据源
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://152.136.27.48:3306/d_xiaokai?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

#配置mybatis参数
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.tina.aip.common.entity.Payment
  configuration:
    map-underscore-to-camel-case: true #设置下划线

#注册到eureka
eureka:
  client:
    register-with-eureka: true   #是否将自己注册到注册中心,集群必须设置为true配合ribbon
    fetch-registry: true    #是否从服务端抓取已有的注册信息
    service-url:
      defaultZone: http://springcloud-eureka-server7001:7001/eureka #,http://eureka7002.com:7002/eureka
  instance:
    instance-id: payment8003
    prefer-ip-address: true  #访问路径可以显示IP地址
    lease-renewal-interval-in-seconds: 1  #向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-expiration-duration-in-seconds: 2 #收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除
============================================================
@SpringBootApplication //表明是一个启动类
@EnableEurekaClient //表明是eureka客户端
@EnableSwagger2 //开启swagger测试
@EnableDiscoveryClient // 开启发现注册在eureka上的其他实例
public class PaymentApplication8003 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentApplication8003.class,args);
    }
}

============================================================
@RestController
@Slf4j
@Api(value = "Payment模块")
@RequestMapping("/payment")
public class PaymentController {

    @Resource
    private PaymentService paymentService ;


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


    @Resource
    private DiscoveryClient discoveryClient;

    //获取eureka注册中的所有的实例
    @GetMapping(value = "/discovery")
    public  Object discovery(){

        //1.  获取eureka中所有的实例
        List<String> services = discoveryClient.getServices();
        for (final String service : services) {
            log.info("--eureka注册中的所有实例为-"+service);
        }

        //2.获取eureka中名为springcloud-payment-service相关实例 打印出来
        List<ServiceInstance> instances = discoveryClient.getInstances("springcloud-payment-service");
        for (final ServiceInstance instance : instances) {
            log.info("eureka中的ID为:"+instance.getInstanceId()+",host为"+instance.getHost()+",post端口号"+instance.getPort()+",URL路径为"+instance.getUri());
        }
      return this.discoveryClient;
    }

    //根据ID查询的方法
    @GetMapping(value = "/get")
    public CommonResult getPaymentById(@RequestParam Long id){
        Payment payment = paymentService.getPaymentById(id);
        if(payment != null){
            return new CommonResult(200,"查询数据成功"+port,payment);
        }else {
            return new CommonResult(444,"查询数据失败"+port,null);
        }
    }

    //添加的方法
    @PostMapping(value = "/create")
    public CommonResult create(@RequestBody Payment payment){
        int result = paymentService.create(payment);
        if(result>0){
            return new CommonResult(200,"插入数据成功"+port,null);
        }else {
            return new CommonResult(444,"插入数据失败"+port,null);
        }
    }

}

a) provier

    <dependencies>

        <!--添加common 通用包-->
        <dependency>
            <artifactId>springcloud-api-common</artifactId>
            <groupId>com.tina.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--添加swagger2依赖的jar包-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--   引入eureka客户端     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

    </dependencies>
============================================================
server:
  port: 8002

eureka:
  client:
    register-with-eureka: true   #是否将自己注册到注册中心,集群必须设置为true配合ribbon
    fetch-registry: true    #是否从服务端抓取已有的注册信息
    service-url:
      defaultZone: http://springcloud-eureka-server7001:7001/eureka,http://eureka7002.com:7002/eureka
  instance:
    instance-id: order8002
    prefer-ip-address: true   #访问路径可以显示IP地址

spring:
  application:
    name: springcloud-consumer-order

============================================================
@SpringBootApplication
@EnableSwagger2
@EnableEurekaClient //表明是eureka的客户端
public class OrderApplicaiton8002 {

    public static void main(String[] args) {

        SpringApplication.run(OrderApplicaiton8002.class,args);
    }
}


============================================================

@RestController //等于@Controller + @ResponseBody
@Slf4j
@RequestMapping(value = "/order")
@Api(value = "order模块")
public class OrderController {

    @Resource
    private RestTemplate restTemplate ;

    //private static  final  String BASE_URL = "http://localhost:8001/";
    private static  final  String BASE_URL = "http://SPRINGCLOUD-PAYMENT-SERVICE";


    @PostMapping(value = "/create")

    public CommonResult create(@RequestBody Payment payment){

     return restTemplate.postForObject(BASE_URL+"/payment/create",payment,CommonResult.class);
    }

    @GetMapping(value = "/get")
    public CommonResult get(@RequestParam Long id){
        String url = BASE_URL+"/payment/get/?id="+id  ;
        log.info("url的值为:"+url);
        return restTemplate.getForObject(url,CommonResult.class);
    }


}


2. Sprint cloud 集成Zookeeper

image.png image.png image.png image.png

已经在服务器上安装的是zookeeper-3.4.14 ,开启客户端和服务端

2 -1 . 服务消费者

pom.xml:
    <dependencies>
        <dependency>
            <artifactId>springcloud-api-common</artifactId>
            <groupId>com.tina.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--添加swagger2依赖的jar包-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--   引入zookeeper客户端     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
        </dependency>
    </dependencies>

============================================================
配置文件:
server:
  port: 8002

# 服务别名---zookeeper注册中心名称
spring:
  application:
    name: springcloud-consumer-order8002
  cloud:
    zookeeper:
      connect-string: 152.136.27.48:2181
      max-retries: 10
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://152.136.27.48:3306/d_xiaokai?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
============================================================
启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableSwagger2
public class OrderZKApplicaiton8002 {

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

============================================================
控制类
@RestController
@RequestMapping(value = "order")
@Api(value = "Order模块")
@Slf4j
public class OrderController {

    @Resource
    private RestTemplate restTemplate ;

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

    private static  final String BASE_URL = "http://springcloud-provider-payment8004";

    @GetMapping(value = "get")
    public String get(){
        String url = BASE_URL+"/payment/getZk";
        log.info(url);
        return  restTemplate.getForObject(url, String.class);
    }


}


2 -2 . 服务提供者

pom.xml:
<dependencies>
        <!--添加common 通用包-->
        <dependency>
            <artifactId>springcloud-api-common</artifactId>
            <groupId>com.tina.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!--添加swagger2依赖的jar包-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>

        <!--   引入zookeeper客户端     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
        </dependency>

    </dependencies>

============================================================
配置文件:
server:
  port: 8004

# 服务别名---zookeeper注册中心名称
spring:
  application:
    name: springcloud-provider-payment8004
  cloud:
    zookeeper:
      connect-string: 152.136.27.48:2181
      max-retries: 10

============================================================
启动类
@SpringBootApplication
@EnableSwagger2
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时 注册服务
public class PaymentApplication8004 {

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

============================================================
控制类
@RestController
@Slf4j
@Api(value = "Payment模块8004")
@RequestMapping("/payment")
public class PaymentController {

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

    @GetMapping(value="/getZk")
    public String paymenZk(){

        return "Payment模块8004"+port+ UUID.randomUUID().toString();
    }



}




2. Sprint cloud 集成consul

image.png image.png

三中注册中心的区别 :

image.png

CAP 原则

image.png

image.png



3. Sprint cloud 集成ribbon

image.png image.png image.png image.png image.png image.png image.png

Ribbon负载均衡的策略算法:

image.png image.png

另行设置rribbon 注意事项

image.png image.png image.png
image.png

Ribbon中默认的的轮询负载策略的原理

手动编写一个轮询策略

g

第一步 将配置类中注解@LoadBanlance注释
第二步: 在启动类下新建一个接口及其实现类

接口
public interface LoadBalancer {
   ServiceInstance instance(List<ServiceInstance> serviceInstances);
}
============================================================实现类
**
 * (this.atomicInteger.compareAndSet(current,next)) 的用法
 * 在这个循环条件下,假设有多个线程在同时执行这段代码,
 * 即使有一个线程在产生了新值之后,它还需要让它自己产生的新值与旧值比较之后才能决定要不要这个新值。
 * 也就是说,如果oldValue是10,而产生的新值是20,然后程序还没到while的时候,有其他线程修改了newValue值,
 * 那当这个线程到while判断的时候,会出现comparAndSet方法的预期值不跟实际值一样,导致方法返回false,
 * 直到没有其他线程干扰。这时就确定了新产生的值。
 * */
@Component
@Slf4j
public class MyLB implements  LoadBalancer {

    //定义一个常量
    private AtomicInteger atomicInteger = new AtomicInteger(0);

    //设置两个变量 current,next 并赋值
    public final int getAndIncrement(){
        int current;
        int next;
        do{
            current = this.atomicInteger.get();
            next = (current>2147483647) ? (0) : (current+1) ;
        }while ( !(this.atomicInteger.compareAndSet(current,next)) );


        log.info("next的值为:"+ next);
        return next;
    }

    @Override
    public ServiceInstance instance(List<ServiceInstance> serviceInstances) {
        int index = getAndIncrement() % serviceInstances.size();
        return serviceInstances.get(index);
    }

}

第三步 控制类

 /**
     * 测试自定义的轮询算法策略
     */
    @Resource
    private LoadBalancer loadBalancer ;
    @Resource
    private DiscoveryClient discoveryClient ;

    @GetMapping(value = "/getRB")
    public String getRB(@RequestParam Long id){
        List<ServiceInstance> instancesList = discoveryClient.getInstances("SPRINGCLOUD-PAYMENT-SERVICE");
        //判断集合instancesList 是否为空 不为空方可继续执行
        if(instancesList.isEmpty()){
            return null;
        }else {
            ServiceInstance instance = loadBalancer.instance(instancesList);
            URI uri = instance.getUri();
            return restTemplate.getForObject(uri+"/payment/get/?id="+id,String.class);
        }
    }



4. Sprint cloud 集成openFeign

定义


功能


Feign和openFeign的区别


openFegin用法


image.png
 pom.xml
<dependencies>
        <!--添加common 通用包-->
        <dependency>
            <artifactId>springcloud-api-common</artifactId>
            <groupId>com.tina.springcloud</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--添加swagger2依赖的jar包-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>

        <!--添加openFeign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>

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


        <!-- boot web actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--  一般通用配置  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--  热部署      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--   单元测试     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

=========================================================
配置文件
server:
  port: 8002

eureka:
  client:
    register-with-eureka: true   #是否将自己注册到注册中心
    fetch-registry: true    #是否从服务端抓取已有的注册信息
    service-url:
      defaultZone: http://springcloud-eureka-server7001:7001/eureka,http://springcloud-eureka-server7002:7002/eureka
  instance:
    instance-id: springcloud-consumer-order
    prefer-ip-address: true   #访问路径可以显示IP地址

spring:
  application:
    name: springcloud-consumer-order

#设置openFeign客户端超时事件,适用于网络状况正常的情况下,两端连接所有的



# 配置feign的日志级别,以什么级别监视哪个接口
logging:
  level:
    com.tina.consumer.openfeign.service.PaymentFeignService: debug
=========================================================

配置类
@Configuration
public class OpenFeignConfig {

    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
   
}
=========================================================

启动类
@SpringBootApplication
@EnableFeignClients //开启openFeign
@EnableSwagger2
public class FeignOrderApplication8002 {
    public static void main(String[] args) {
        SpringApplication.run(FeignOrderApplication8002.class,args);
    }
}

=========================================================
service 接口
@Component
@FeignClient(value = "springcloud-payment-service") //指定调用哪个微服务 SPRINGCLOUD-PAYMENT-SERVICE
public interface PaymentFeignService {


    //根据ID查询的方法
    @GetMapping(value = "/payment/get")
    public CommonResult getPaymentById(@RequestParam(value = "id") Long id);

    @GetMapping(value = "/payment/getDelay")
    public CommonResult getDelay();
}

=========================================================
控制类 
@RestController
@Slf4j
@Api(value = "Payment模块")
@RequestMapping("/payment")
public class PaymentController {

    @Resource
    private PaymentService paymentService ;

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


    // 设置一个延时
    @GetMapping(value = "/getDelay")
    public CommonResult getDelay(){
        try {
            Thread.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return new CommonResult(200," 操作成功",null);
    }


    //添加的方法
    @PostMapping(value = "/create")
    public CommonResult create(@RequestBody Payment payment){
        int result = paymentService.create(payment);
        log.info("插入的结果为:"+result);
        if(result>0){
            return new CommonResult(200,"插入数据成功"+port,null);
        }else {
            return new CommonResult(444,"插入数据失败"+port,null);
        }
    }


    //根据ID查询的方法
    @GetMapping(value = "/get")
    public CommonResult getPaymentById(@RequestParam Long id){
        Payment payment = paymentService.getPaymentById(id);

        if(payment != null){
            return new CommonResult(200,"查询数据成功"+port,payment);
        }else {
            return new CommonResult(444,"查询数据失败"+port,null);
        }
    }

}


=========================================================
备注
须在服务提供者的配置文件中开启ribbon负载均衡

openFegin日志


image.png

相关文章

网友评论

    本文标题:微服务eureka, ribbon,zookeeper,cons

    本文链接:https://www.haomeiwen.com/subject/wclddhtx.html