开发人员本地的服务如果注册到服务器的注册中心,服务器上的服务如果调用到开发本地的服务会调用不通,影响大家的开发效率。
以往为了不把本地服务注册到注册中心,会采用以下几种处理方式:
1、修改服务名,例如:将user-service修改为user-service-double,这样别的服务就不会调用到开发人员本地注册上去的服务了
2、修改是否注册到注册中心的配置参数为false:
-Dspring.cloud.service-registry.auto-registration.enabled=false
第一种方案容易出现把修改后的service误提交到git的情况,导致测试、生产注册的服务名错误
第二种方案需要每个开发同学都手动到IDE配置一个启动参数,开发人员过多(100+)不能保证每个同学都执行到位
新方案:服务启动时判断操作系统类型,如果是Linux则注册服务,如果不是则不注册(本地服务都是windows、mac系统)将Processor处理类放入基础包中,这样每个服务都引用到,不需要每个开发同学都去处理本地服务不注册问题。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
* 在spring上下文构建之前可以设置一些系统配置
* 可以在创建应用程序上下文之前,添加或者修改环境配置。
* @author double
* @Date 2022/1/26 11:43 上午
@Order(ConfigDataEnvironmentPostProcessor.ORDER + 1)
public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor {
private static final String PROPERTY_SOURCE_NAME = "discoveryProperties";
private static final String SERVICE_REGISTRY_CONFIG_KEY = "spring.cloud.service-registry.auto-registration.enabled";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
String serviceRegistry = environment.getProperty(SERVICE_REGISTRY_CONFIG_KEY);
if(!StringUtils.hasText(serviceRegistry)) {
boolean isLinux = System.getProperty("os.name").toLowerCase().contains("linux");
Map<String, Object> map = new HashMap<>(1);
map.put(SERVICE_REGISTRY_CONFIG_KEY, isLinux);
MapPropertySource propertySource = new MapPropertySource(PROPERTY_SOURCE_NAME, map);
environment.getPropertySources().addLast(propertySource);
开发人员本地的服务如果注册到服务器的注册中心,服务器上的服务如果调用到开发本地的服务会调用不通,影响大家的开发效率。以往为了不把本地服务注册到注册中心,会采用以下几种处理方式:1、修改服务名,例如:将user-service修改为user-service-double,这样别的服务就不会调用到开发人员本地注册上去的服务了2、修改是否注册到注册中心的配置参数为false:-Dspring.cloud.service-registry.auto-registration.enabled=false第
分布式跟踪:侦探,Zipkin
build-images.sh用于构建build-images.sh镜像。 它标记与图像192.168.99.100:5000前缀把它们上传到本地注册服务器上192.168.99.100 。 如果您的注册服务器的地址不是192.168.99.100:5000请更新到正确的地址。 如果您没有部署到Kubernetes,则可以删除这些前缀。
push-images.sh用于将push-images.sh映像推送到注册表服务器。
deploy-do
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--服务注册/发现中心依赖-->
<dependency>
将spring-cloud升级到最新版本后,ribbion被替换为spring-cloud-loadbalancer。
针对spring-cloud-loadbalancer,在本地调试时,不启动注册中心,可做如下配置:
spring:
cloud:
discovery:
client:
simple:
instances:
service1(替换成自己的服务名称):
- host: 127.0.0.1
认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)...
所以,这篇主要来讲讲SpringCloud的一些基础的知识。(我就是现学现卖了,主要当做我学习SpringCloud的笔记吧!)当然了,我的水平是有限的,可能会有一些理解错的的概念/知识点,还请大家不吝在评论区指正啊~~
SpringCloud GitHub Demo(看完文章的同学可以自己练手玩玩):
https://github.com/Zhon
自己的项目所有的配置都是ok的(主启动类也加了**@@EnableDiscoveryClient**注解),启动也不报错就是注册不到服务中心。就很纳闷啊,于是我又仔细的检查了一遍,终于找到问题的所在了。
<!--这个是一开始添加的eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-net
springcloud微服务框架
springboot单应用框架
mybatis+Generator还有mybatis的分页插件PageHelper(官方代码生成器)持久层框架
数据库mysql
前端响应式框架bootstarp
模板引擎Freemarker,应用十分广泛,可以和Thymeleaf一样作为前端界面模板,用于生成静态页面
项目管理构建工具Maven(这里会用到Maven的拆...
A:Spring Cloud支持多种服务注册与发现组件,其中比较常用的有Eureka、Consul和Zookeeper。这些组件的主要区别如下:
1. Eureka:基于Netflix开源的组件,内置了客户端负载均衡和故障转移等功能,使用RESTful API进行服务注册和发现,适用于互联网应用场景。
2. Consul:HashiCorp出品的一款服务发现和配置管理组件,支持健康检查和DNS解析等功能,同时还提供了分布式KV存储,适用于复杂的分布式场景。
3. Zookeeper:Apache基金会出品的一款分布式协调服务,定位于数据的一致性和可靠性,在服务注册和发现中需要通过Zookeeper提供的节点监听和Watcher机制实现。
总体来说,这些组件都具有服务注册和发现的基本功能,但在实现细节和操作习惯上有所不同,选择合适的组件需要根据具体业务需求和技术背景进行考虑。