springcloud(体系搭建)

 

源码:https://gitee.com/chenhaotest/springcloud/repository/archive/master.zip

 


前言

总结springcloud系列 如何用idea搭建,以及总结各个点

Spring Cloud技术点

Eureka:服务注册与发现,用于服务管理。

Feign: web调用客户端,能够简化HTTP接口的调用。

Ribbon:基于客户端的负载均衡。

Hystrix:熔断降级,防止服务雪崩。

Zuul:网关路由,提供路由转发、请求过滤、限流降级等功能。

Config:配置中心,分布式配置管理。

Sleuth:服务链路追踪

Admin:健康管理


提示:以下是本篇文章正文内容,下面案例可供参考

一、springcloud

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、idea创建

1.

作用:  用idea创建一个服务

图如下:

选择 spring Initializr

修改Group和Artifact

创建一个公共基础包,什么包都不用引入,也不用启动,,配置文件,启动类都删除掉。

集成公共返回的代码,以及状态码类

总结

springcloud的系列服务,基本上都是这样创建的


三、eureka-server

1.

图如下:

2.

pom.xml,代码如下

@EnableEurekaServer

图如下:

3.

配置文件,代码如下:

注:单体配置

文件名:application.yml


spring:
  application:
    name: eureka   #服务名称

logging:
  level:
    root: debug   #日志打印

server:
  port: 7901
eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: false
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: false
    #设置服务注册中心的URL,用于client和server端交流
    service-url:
      defaultZone: http://localhost:7901/eureka/

访问:

http://localhost:7901/

eureka集群,防止单节点宕机

4.

配置文件,代码如下:

注:集群配置

文件名:application.yml

#高可用2个节点
spring:
  application:
    name: eureka

logging:
  level:
    root: debug

---
spring:
  profiles: 7901
server:
  port: 7901
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/
---
spring:
  profiles: 7902
server:
  port: 7902
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7901/eureka/,http://localhost:7902/eureka/

yml配置文件,配置集群时,可以把共用的抽出来,单独的部分需要进行编写,   用 ---

---
spring:
  profiles: 7901
server:
  port: 7901

5.

用idea启动集群配置

图如下:

 

active profiles:要和配置文件的一样

 

访问:

http://localhost:7901/

访问:

http://localhost:7902/

总结

eueka 集群配置,主要是把注册eureka的服务,服务名和注册ip以注册表的形式保存下来。 


四、eureka-client

1.

图如下:

2.

配置文件,代码如下:

文件名:application.yml


spring:
  application:
    name: demo-client   #服务名称

logging:
  level:
    root: debug   #日志打印

server:
  port: 7801
eureka:
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: true
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: true
    #设置服务注册中心的URL,用于client和server端交流
    service-url:
      defaultZone: http://localhost:7901/eureka/   #单节点
      #defaultZone: http://localhost:7901/eureka/,http://localhost:7902/eureka/  #多节点

3.

pom.xml配置文件,引入

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

查看

总结

eueka 客户端搭建,以及如何注入服务端。比较简单。


六、Feign-caller

注释:Feign: web调用客户端,能够简化HTTP接口的调用。

1.

图如下:

2.

配置文件,代码如下:

文件名:application.yml

server:
  port: 7911
spring:
  application:
    name: feign-caller
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/

3.pom.xml配置文件,引入

 

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <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>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.chen</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

4 :注解

@EnableFeignClients
@EnableEurekaClient

5:创建基础class

controller

@RestController
@RequestMapping("/feigncaller")
public class TestFeignCallerController {
    @Autowired
    private TestFeignCallerService feignCallerService;

    /**
     * 服务降级
     */
    @RequestMapping("/test")
    public void test1(){
        ResponseResult list=feignCallerService.getTestData();
        System.out.println(list);

    }

}

service注释:请看注释

/**
 * 要和被调用服务的返回结果以及传参结果一样
 */
@FeignClient(name = "feign-called")//被调用服务的,服务名字
public interface TestFeignCallerService {

        //被调用服务的,方法路径。以及方法类型
    @RequestMapping(value = "/feigncalled/demo",method = RequestMethod.POST)
    ResponseResult getTestData();
}

 

七:Feign-called

1.

配置文件,代码如下:

文件名:application.yml

server:
  port: 7912
spring:
  application:
    name: feign-called
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/


2.pom.xml配置文件,引入

 

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.chen</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

3 :注解

@EnableEurekaClient

controller

@RestController
@RequestMapping("/feigncalled")
public class TestFeignCalledController {

    @RequestMapping("/demo")
    public ResponseResult test1() {
        ArrayList<String> list = new ArrayList<>();
        list.add("22");
        list.add("33");
        list.add("44");
        ResponseResult result = new ResponseResult();
        result.setData(list);
        result.setMessage("成功");
        return result;
    }
}

访问:

http://localhost:7911/feigncaller/test


八  : RestTemplate 调用

1.

配置文件,代码如下:

文件名:application.yml

server:
  port: 7913
spring:
  application:
    name: rest-template
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/

2.pom.xml配置文件,引入

 

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.chen</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

3 :注解

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

controller

@RestController
@RequestMapping("/RestTemplateController")
public class DemoRestTemplate {

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 服务降级
     */
    @RequestMapping("/test")
    public void test1(){
        String url = "http://feign-called/feigncalled/demo1"; //服务名 + 加请求地址
        String request="restTemplate";
        ResponseResult result = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<Object>(request, null), ResponseResult.class).getBody();
        System.out.println(result);

    }
}

在Feign-called 服务的controller加一个方法

@RestController
@RequestMapping("/feigncalled")
public class TestFeignCalledController {

    @RequestMapping("/demo")
    public ResponseResult test1() {
        ArrayList<String> list = new ArrayList<>();
        list.add("22");
        list.add("33");
        list.add("44");
        ResponseResult result = new ResponseResult();
        result.setData(list);
        result.setMessage("成功");
        return result;
    }

    /**
     *  如果方法需要传参数, 需要 加上 @RequestBody   注解
     * @param request
     * @return
     */
    @RequestMapping(value = "/demo1",method = RequestMethod.POST)
    public ResponseResult test2(@RequestBody String request) {
        ArrayList<String> list = new ArrayList<>();
        list.add("22");
        list.add("33");
        list.add("44");
        list.add(request);
        ResponseResult result = new ResponseResult();
        result.setData(list);
        result.setMessage("成功");
        return result;
    }
}

 

访问:

http://localhost:7913/RestTemplateController/test

 

九:ribbon  与  RestTemplate /Feign  负载均衡

 

1.

注释:这边就在原基础上  RestTemplate /Feign  调用的原基础上

在六和八的基础上,配置文件加上。

feign-called是被调用服务的服务名。 被调用服务开启集群模式

feign-called:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

十:熔断,Hystrix  与  feign/restTemplate结合


1Hystrix与feign.

配置文件,代码如下:

文件名:application.yml

server:
  port: 7916
spring:
  application:
    name: hystriy-feign
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/

#负载
feign-called:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

#开始feign断融
feign:
  hystrix:
    enabled: true

2.pom.xml配置文件,引入

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <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-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.chen</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
 

3 启动类注解

@EnableFeignClients //feign
@EnableCircuitBreaker //hystriy 断融
@EnableEurekaClient //eureka客户端


4 controller

@RestController
@RequestMapping("/feigncaller")
public class TestFeignCallerController {
    @Autowired
    private TestFeignCallerService feignCallerService;


    @RequestMapping("/test")
    public void test1(){
        ResponseResult list=feignCallerService.getTestData();
        System.out.println(list);

    }

}

5service

/**
 * 要和被调用服务的返回结果以及传参结果一样
 */
@FeignClient(name = "feign-called",fallbackFactory= ServiceFallbackFactory.class)//被调用服务的,服务名字
public interface TestFeignCallerService {

        //被调用服务的,方法路径。以及方法类型
    @RequestMapping(value = "/feigncalled/demo",method = RequestMethod.POST)
    ResponseResult getTestData();
}

6 fallback

@Component
public class ServiceFallbackFactory implements FallbackFactory<TestFeignCallerService> {
    @Override
    public TestFeignCallerService create(Throwable cause) {
        return new TestFeignCallerService(){
            @Override
            public ResponseResult getTestData() {
                return ResponseResult.fail(11).setMessage("熔断了").setMessage("请jiachabug");
            }
        };
    }
}

访问:把被调用服务关闭。

http://localhost:7916/feigncaller/test

结果:

ResponseResult(code=-1, message=请jiachabug, data=11)

7Hystrix与restTemplate.

1.

配置文件,代码如下:

文件名:application.yml

server:
  port: 7917
spring:
  application:
    name: hystriy-rest-template
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/

2.pom.xml配置文件,引入

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <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-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>com.chen</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
 

3 启动类注解


@EnableCircuitBreaker  //hystriy  断融
@EnableEurekaClient //eureka
    /**
     *   使用 restTemplate 徐需要注入bean
     * @return
     */
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }


4 controller


@RestController
@RequestMapping("/RestTemplateController")
public class DemoRestTemplate {

    @Autowired
    private DemoHystriyServiceImpl demoHystriyService;

    /**
     * 服务降级
     */
    @RequestMapping("/test")
    public void test1(){
        ResponseResult result = demoHystriyService.test("测试断融");
        System.out.println(result);

    }
}

5service

    @Autowired
    private RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod = "fallback",commandProperties = {
            @HystrixProperty(name = HystrixPropertiesManager.FALLBACK_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS,value = "10")//服务降级:如果并发数达到该设置值,请求会被拒绝和抛出异常并且fallback不会被调用。
    } )
    public ResponseResult test(String name) {
        String url = "http://feign-called/feigncalled/demo1"; //服务名 + 加请求地址
        String request="restTemplate";
        ResponseResult result = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<Object>(request, null), ResponseResult.class).getBody();
        return result;
    }


    /**
     *   熔断方法
     * @param request
     * @return
     */
    private ResponseResult fallback(String request) {
        System.out.println("熔断:"+request);
        //备用逻辑
        return ResponseResult.fail(11).setMessage("熔断了").setMessage("请jiachabug");
    }
 

访问

 

http://localhost:7917/RestTemplateController/test
熔断:测试断融
ResponseResult(code=-1, message=请jiachabug, data=11)

十一:网关 zull

1.

配置文件,代码如下:基础

文件名:application.yml


server:
  port: 6001

spring:
  application:
    name: zuul

#注册中心
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/
  instance:
    hostname: localhost
    instance-id: zuul








 

网关负载服务

文件名:application.yml


server:
  port: 6001

spring:
  application:
    name: zuul

#注册中心
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/
  instance:
    hostname: localhost
    instance-id: zuul


#指定服务负载
  #feign-called:
    #ribbon:
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
#所有服务负载
ribbon:
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule






 

网关配置

文件名:application.yml


server:
  port: 6001

spring:
  application:
    name: zuul

#注册中心
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/
  instance:
    hostname: localhost
    instance-id: zuul


#指定服务负载
  #feign-called:
    #ribbon:
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
#所有服务负载
ribbon:
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule


  #路由配置
zuul:
  routes:
    #制定服务访问路径,可以通过新配置的服务名访问之前 服务
    orderdemo: /orderdemo/**
    #忽略服务名,配置该属性,此服务名成不能被访问
    #ignored-services:
    #- orderdemo
    #配置此列,在访问服务午后需要加此路径
  #prefix: /api
  #sensitive-headers: token

2.pom.xml配置文件,引入

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

3 启动类注解

@EnableEurekaClient
@EnableZuulProxy

 

访问:

http://localhost:网关端口/服务名/服务接口

http://localhost:6001/hystriy-feign/feigncaller/test

4:网关容错



/**
 * 网关容错
 */
@Component
public class DemoFallback implements FallbackProvider {

    @Override
    public String getRoute() {
       // return "服务名";
        return "*"; //*代表所有服务
    }

    @Override
    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
        return new ClientHttpResponse(){
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK;
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return HttpStatus.OK.value();
            }

            @Override
            public String getStatusText() throws IOException {
                return HttpStatus.OK.getReasonPhrase();
            }

            @Override
            public void close() {

            }

            @Override
            public InputStream getBody() throws IOException {
                String response = "{\n" +
                        "    \"msg\": \"服务失去联系,请联系管理员\",\n" +
                        "    \"code\": 400,\n" +
                        "    \"data\": null\n" +
                        "}";
                ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(response.getBytes());
                return byteArrayInputStream;
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders = new HttpHeaders();
                httpHeaders.setContentType(MediaType.APPLICATION_JSON);
                return httpHeaders;
            }
        };
    }
}

5:网关过滤器


@Component
public class ProDemo extends ZuulFilter {

    /**
     * 过滤器的类型
     * @return
     */
    @Override
    public String filterType() {

        System.out.println("过滤器pre");
       // return "error";
       // return "post";
       // return "route";
        return "pre";
    }


    /**
     * 执行的顺序
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     *  过滤器是否生效开关,true  开启,false,  关闭
     *  如果过滤器是关闭的状态,那么是不走run的
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 过滤器逻辑
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {

        System.out.println("dadaa");
        return null;
    }
}

十二:配置中心-server

1.

文件名:application.yml

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          #https://github.com/yueyi2019/online-taxi-config-profile.git
          uri: https://gitee.com/chenhaotest/config-server
          username:
          password:
          #默认是秒,因为git慢
          timeout: 15
          force-pull: true
  rabbitmq:
    host: 39.104.57.114
    port: 5672
    username: zfzyy
    password: zfzyy123@
    virtual-host: /


server:
  port: 7001
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/


management:
  #  actuator的端口可以单独定义,如果不定义的话,默认为${server.port}
  #  server:
  #    port: 31000
  endpoints:
    web:
      exposure:
        include: "*" #默认只暴露了/actuator/info和/actuator/health,没有暴露/actuator/bus-refresh,这里把所有endpoints都暴露了
      cors:
        allowed-origins: "*"
        allowed-methods: "*"

2.pom.xml配置文件,引入

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <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-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
 

3 启动类注解

@EnableEurekaClient
@EnableConfigServer

4 git上传配置文件

 

配置文件的名字配置中心客户端的服务名+profile的名字

十三:配置中心-client

1.

文件名:application.yml


spring:
  application:
    name: config-client
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-server
      label: master
     # uri: http://localhost:6001/
      profile: dev
  rabbitmq:
    host: 39.104.57.114
    port: 5672
    username: zfzyy
    password: zfzyy123@
    virtual-host: /
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/

---
spring:
  profiles: 7002
server:
  port: 7002

---
spring:
  profiles: 7003
server:
  port: 7003

2.pom.xml配置文件,引入

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</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-config</artifactId>
        </dependency>
        <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-bus-amqp</artifactId>
        </dependency>
 

3 启动类注解

@EnableEurekaClient

 

4controller测试类

5测试刷新

public class HttpClientUtil {

    public static void main(String[] args) {
        //String url="http://127.0.0.1:9030/bus/refresh?destination=config-client:**";
        String url="http://127.0.0.1:7001/actuator/bus-refresh";
        String html=HttpClientUtil.doPost(url);
        System.out.println(html);

    }

    public static String doGet(String url, Map<String, String> param) {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();

            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);

            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet(String url) {
        return doGet(url, null);
    }

    public static String doPost(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<NameValuePair>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"utf-8");
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    public static String doPost(String url) {
        return doPost(url, null);
    }

    public static String doPostJson(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }
}
 

十四 链路追踪

1.

sleuth,zipkin

文件名:application.yml

spring:
  #zipkin
  zipkin:
    base-url: http://localhost:9411/
    #采样比例1
  sleuth:
    sampler:
      rate: 1

2.pom.xml配置文件,引入

    <!--链路追踪开始-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <!-- zipkin -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
        <!--链路追踪结束-->

3 启动类注解

@EnableEurekaClient

4 下载zipkin包启动

jar包下载:curl -sSL https://zipkin.io/quickstart.sh | bash -s


java -jar zipkin.jar

5 访问地址

http://localhost:9411/zipkin/

 

十五 健康检测admin-server

1.

admin-server

文件名:application.yml

spring:
  application:
    name: admin   #服务名称
logging:
  level:
    root: debug   #日志打印
server:
  port: 8001
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/

2.pom.xml配置文件,引入

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>
        <!-- Admin 界面 -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui</artifactId>
        </dependency>

3 启动类注解

@EnableAdminServer

十六 健康检测 admin-client

1.

admin-client

文件名:application.yml

server:
  port: 4001
spring:
  application:
    name: admin-client
  boot:
    admin:
      client:
        url: http://localhost:8001
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:7902/eureka/,http://localhost:7901/eureka/

management:
  endpoints:
    web:
      exposure:
        #yml加双引号,properties不用加
        include: "*"
  endpoint:
    health:
      ##默认是never
      show-details: ALWAYS
      enabled: true

2.pom.xml配置文件,引入

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

3 启动类注解

@EnableEurekaClient

访问

 

 

23

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值