spring cloud

参考资料

spring cloud 优质教程集合

其他资料

fegin http请求工具,Feign使得 Java HTTP 客户端编写更方便

学习笔记

监控

spring-boot-starter-actuator监控接口详解 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件。每个应用都认为是一个客户端,通过HTTP或者使用 Eureka注册到admin server中进行展示,Spring Boot Admin UI部分使用AngularJs将数据展示在前端。使用spring-boot-admin对spring-boot服务进行监控

网关服务

springCloud(14):使用Zuul构建微服务网关-路由端点与路由配置详解 提供一个对外的统一api接口,使外部的服务可以通过正常的http请求来访问注册到服务中心的服务 请求方式:{网关的host}:{port}/{注册到服务中心的application-name 小写}/REQUEST PATH eg:http://koyou.top:8020/customer-service/getNeoHello

spring mvc 注册到spring cloud中

非Spring Boot Web项目 注册节点到Eureka Server并提供服务 - CSDN博客

配置中心

spring-cloud-configserver 可以使用消息总线,即借助mq来分发通知配置文件的修改。 也可以不使用总线,则每个client需要手动触发/refresh事件来重新获取配置

不使用消息总线

springcloud(七):配置中心svn示例和refresh - 纯洁的微笑博客 1.客户端添加spring-boot-starter-actuator依赖,该包具有一套完整的监控,其中包括一个/refresh功能 2.需要给加载变量的类上面加载@RefreshScope,在客户端执行/refresh(POST请求)的时候就会更新此类下面的变量值 3.添加配置management.security.enabled=false关闭安全认证 4.配置变更后,客户端以post请求的方式来访问http://localhost:8002/refresh(curl -X POST http://localhost:8002/refresh)

使用消息总线

springcloud(九):配置中心和消息总线(配置中心终结版) Application Context ID 说明 需要刷新消息的客户端添加依赖,该包提供了消息的发送和接受

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

在任意配置了该依赖的客户端执行/bus/refresh即可以将配置更新消息通知给所有客户端。 如果需要指明具体更新配置的客户端则使用/bus/refresh?destination=customers:8000 destination的值是各个微服务的ApplicationContext ID,关于ApplicationContext ID可以在org.springframework.boot.context.ContextIdApplicationContextInitializer 类的getApplicationId() 方法中看到。默认应该是${spring.application.name}:${server.port}

消息总线

Spring Cloud Bus中的事件的订阅与发布(一) - 掘金

扩展消息总线/自定义消息总线配置

spring cloud bus 扩展消息总线方法 spring cloud bus 扩展消息总线方法文中存在一个问题,使用这种继承AbstractBusEndpointBusAutoConfiguration的方式来发送message会导致消息重复接收,以及导致原有的消息总件功能失效, 因此应该采用其它方式来发送消息,如下

@Autowired
private ApplicationContext context;
@RequestMapping(value = "/config", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public JsonResult<String> test() {
final String instanceId=context.getId();
final TradeAppliedEvent event=new TradeAppliedEvent(this,instanceId,null);
event.setTradeId("test trade id");
event.setUserId("test user id");
context.publishEvent(event);
return new JsonResult<>("");
}

github 示例

坑点

eureka集群中replicas显示为unavailable

spring cloud unavailable-replicas - CSDN博客

启动服务时虽然采用 --spring.profiles.active = peer1 指定了配置文件,但还是会从 application.properties 中取值,将application.properties的

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

注释掉或者 在 application-peer1.properties 与 application-peer2.properties 中显示 指定 这两个属性值为true即可。

(tag: spring boot 配置文件加载顺序) yml和properties的加载顺序和区别 spring cloud 属性加载顺序:会按照下图的优先级加载,如果第一层没有配置key的值则去第二层查找,如果配置了则不会继续查找该key的值, 即低优先级的不会覆盖高优先级的值,只会补充没有配置的spring cloud属性加载顺序

eureka列表显示ip

eureka的Instances status列表显示ip 服务提供者配置

eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}

非Boot项目 注册到spring cloud(eureka server) 提供服务

spring-cloud-not-boot.md