服务多,迭代快是微服务的明显特征。那么在快速小版本迭代业务时,如果按照传统的方式发布更新服务,手动的修改一些服务与服务之间的调用关系是非常麻烦且累人的。一个典型的场景可能是,一个微服务升级迭代之后,硬件环境发生改变(ip等的变化)。传统的做法是修改与其有调用关系的微服务调用地址然后一个个重启。这显然是非常麻烦又容易出错的。而服务发现与注册就是帮你把上述一系列的工作给封装好实现自动发现注册的服务去更新。集体为所有的微服务启动时都去注册中心登记,不管是调用者还是服务提供者,都通过注册中心完成服务的发现。这样就大大提升了我们实际工作中的效率问题。
当前世面的服务注册发现框架很多,比较常见的有zookeeper、springcloudeureka、consul、etcd等。这里只做简单介绍。具体还以实际场景做出选择。
zookeeper | eureka | consul | etcd | 功能 |
---|---|---|---|---|
keepalive | 客户主动报心跳 | 服务状态,内存,磁盘等 | 连接心跳 | 健康检查 |
n | y | y | n |多数据中心
y |y | y |y|springcloud集成
acl | na | acl/https |https|安全
客户端 | java/http | http/dns |http/grpc|客户端接口
cp | ap | ca | cp | cap
paxos | 定制p2p | raft |raft|一致性协议
y | n | y |y|kv存储
先附上github地址
具体步骤
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.0.5.release</version> <relativepath/> <!-- lookup parent from repository --> </parent> <groupid>cn.kxtop.blog</groupid> <artifactid>spring-cloud-demo</artifactid> <version>0.0.1-snapshot</version> <name>spring-cloud-demo</name> <description>demo project for spring boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>finchley.sr1</spring-cloud.version> </properties> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</artifactid> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <optional>true</optional> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> <exclusions> <exclusion> <groupid>org.junit.vintage</groupid> <artifactid>junit-vintage-engine</artifactid> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project>
<parent> <artifactid>spring-cloud-demo</artifactid> <groupid>cn.kxtop.blog</groupid> <version>0.0.1-snapshot</version> </parent> <modelversion>4.0.0</modelversion> <artifactid>eureka</artifactid> <dependencies> <!-- eureka server --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency> <!-- 系统监控 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build>
# eureka支持集群间互相注册,这里为了方便只搭建一台,生产环境中请搭建集群并修改 eureka.client.registerwitheureka = false eureka.client.fetchregistry = false配置 spring.application.name = eureka-registry logging.level.org.spring.framework.security=info eureka.instance.prefer-ip-address = true eureka.client.registerwitheureka = false eureka.client.fetchregistry = false eureka.server.waittimeinmswhensyncempty = 0 server.port = 8761
import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.eureka.server.enableeurekaserver; @enableeurekaserver @springbootapplication public class eurekaapplication { public static void main(string[] args) { springapplication.run(eurekaapplication.class, args); } }
localhost:8761
查看。下一篇,测试创建业务项目并测试eureka服务注册与发现。
持续学习,记录点滴。更多文章请访问
如对本文有疑问, 点击进行留言回复!!
14、Ribbon整合断路器监控Hystrix Dashboard
网友评论