版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
为什么需要服务中心
过去,每个应用都是一个CPU,一个主机上的单一系统。然而今天,随着大数据和云计算时代的到来,任何独立的程序都可以运行在多个计算机上。并且随着业务的发展,访问用户量的增加,开发人员或小组的增加,系统会被拆分成多个功能模块。拆分后每个功能模块可以作为一个独立的子系统提供其职责范围内的功能。而多个子系统中,由于职责不同并且会存在相互调用,同时可能每个子系统还需要多个实例部署在多台服务器或者镜像中,导致了子系统间的相互调用形成了一个错综复杂的网状结构。
将多种接口集中管理,提供给外界使用。
Ⅰ 服务中心。
1)添加依赖
<artifactId>eureka-server</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2)配置文件
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka
#指定ip启动快
# instance:
# prefer-ip-address: true
# ip-address: 127.0.0.1
3)主函数
@EnableEurekaServer //fuwuzhognixn
@SpringBootApplication
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class);
}
}
4)访问站点
Application | AMIs | Availability Zones | Status |
---|---|---|---|
EUREKA-SERVER | n/a (1) | (1) | UP (1) - PC-201904011602:eureka-server:8761 |
Ⅱ 生产者
1)写一个SpringBoot项目,生成Json数据。
2)pom配置
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--统用mapper启动器-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper.starter.version}</version>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
3)yml配置
server:
port: 8081
spring:
application:
name: user-service ##服务名称
datasource:
url: jdbc:mysql://localhost:3306/cloud
username: root
password: root
mybatis:
type-aliases-package: top.user.pojo
eureka:
client:
service-url:
defaultZone: ##默认区域
4)主函数
@EnableDiscoveryClient //duozhong butong fuwuzhuce zhognxin
@SpringBootApplication
@MapperScan("top.user.mapper") //包扫描
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class);
}
}
5)访问站点
Instances currently registered with Eureka
Application | AMIs | Availability Zones | Status |
---|---|---|---|
EUREKA-SERVER | n/a (1) | (1) | UP (1) - PC-201904011602:eureka-server:8761 |
USER-SERVICE | n/a (1) | (1) | UP (1) - PC-201904011602:user-service:8081 |
Ⅱ Eureka集群
1)复制一个启动配置,更改名字和端口,在applicaiton.yml里面配置,将复制的启动配置注册到原来的注册中心。
## 原来的application.xml。
server:
port: 10085
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka
2)当复制一个启动配置时,更改application.yml,服务就算配置完成了
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10085/eureka
3)然后在生产者和消费者的application.yml中把注册中心配置进去。
server:
port: 8082
spring:
application:
name: consumer-service
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka,http://127.0.0.1:10085/eureka
4)启动两个服务。
当一个注册中心挂了,另一个还在运行,不影响服务间的调用。
127.0.0.1:10085,127.0.0.1:8761.
Application | AMIs | Availability Zones | Status |
---|---|---|---|
CONSUMER-SERVICE | n/a (1) | (1) | UP (1) - PC-201904011602:consumer-service:8082 |
EUREKA-SERVER | n/a (2) | (2) | UP (2) - PC-201904011602:eureka-server:10085 , PC-201904011602:eureka-server:8761 |
USER-SERVICE | n/a (1) | (1) | UP (1) - PC-201904011602:user-service:8081 |
服务下线:正常关闭服务。
失效剔除,每个30s发起一次心跳,没有心跳则会加入一个清单,每隔60s将清单中超过90s没有续约的服务剔除。
自我保护(默认开启),如发生网络延迟等其他情况,挂掉服务比例达到15%,则会保护,不会剔除这些服务。