源码: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