SpringCloud__服务注册与发现Eureka__高可用集群配置
Eureka高可用集群配置
当注册中心扛不住高并发的时候,这时候 要用集群来扛;
我们再新建两个module microservice-eureka-server-2002 microservice-eureka-server-2003
第一步:
pom.xml 把依赖加下:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <!-- 修改后立即生效,热部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
第二步:
2002 2003的主启动类EurekaServerApplication_2002,EurekaServerApplication_2003复制修改下;
第三步:
前面单机的时候 eureka注册中心实例名称 是localhost,现在是集群,不能三个实例都是localhost,这里复杂的办法是搞三个虚拟机,麻烦,这里有简单办法,直接配置本机hosts,来实现本机域名映射;
找到 C:WindowsSystem32driversetc 打开hosts,加配置
127.0.0.1 eureka2001.java1234.com
127.0.0.1 eureka2002.java1234.com
127.0.0.1 eureka2003.java1234.com
第四步:
修改三个项目的application.yml文件,主要是修改 hostname和defaultZone,
2001修改:
server: port: 2001 context-path: / eureka: instance: # 单机 # hostname: localhost #eureka注册中心实例名称 hostname: eureka2001.java1234.com # 集群 client: register-with-eureka: false #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。 fetch-registry: false #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false service-url: defaultZone: http://eureka2002.java1234.com:2002/eureka/,http://eureka2003.java1234.com:2003/eureka/ # 集群 #单机 # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka注册中心交互的地址,查询服务和注册服务用到 #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
2002修改:
server: port: 2002 context-path: / eureka: instance: # 单机 # hostname: localhost #eureka注册中心实例名称 hostname: eureka2002.java1234.com # 集群 client: register-with-eureka: false #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。 fetch-registry: false #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false service-url: defaultZone: http://eureka2001.java1234.com:2001/eureka/,http://eureka2003.java1234.com:2003/eureka/ # 集群 #单机 # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka注册中心交互的地址,查询服务和注册服务用到 #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
2003修改:
server: port: 2003 context-path: / eureka: instance: # 单机 # hostname: localhost #eureka注册中心实例名称 hostname: eureka2003.java1234.com # 集群 client: register-with-eureka: false #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。 fetch-registry: false #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false service-url: defaultZone: http://eureka2001.java1234.com:2001/eureka/,http://eureka2002.java1234.com:2002/eureka/ # 集群 #单机 # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka注册中心交互的地址,查询服务和注册服务用到 #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
第五步:修改服务提供者项目的application.yml,主要修改eureka.client.service-url.defaultZone
server: port: 1001 context-path: / # 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver # url: jdbc:mysql://localhost:3306/db_springcloud # username: root # password: 1234 url: jdbc:mysql://localhost:3306/db_springcloud?useUnicode=true&characterEncoding=utf-8 username: root password: 123 jpa: hibernate: ddl-auto: update show-sql: true eureka: instance: hostname: localhost #eureka客户端主机实例名称 appname: microservice-student #客户端服务名 instance-id: microservice-student:1001 #客户端实例名称 prefer-ip-address: true #显示IP client: service-url: # 单机 # defaultZone: http://localhost:2001/eureka #把服务注册到eureka注册中心 defaultZone: http://eureka2001.java1234.com:2001/eureka/,http://eureka2002.java1234.com:2002/eureka/,http://eureka2003.java1234.com:2003/eureka/ # 集群 info: groupId: $project.groupId$ artifactId: $project.artifactId$ version: $project.version$ 负责人: 张三 联系电话: 110
最后我们测试下:
启动三个注册中心,以及服务提供者项目;
然后浏览器地址栏输入:http://eureka2001.java1234.com:2001/
这里说明,集群创建OK; 红色的那块 ,后面会讲到,是eureka的自我保护。
假如访问 http://eureka2002.java1234.com:2002/ http://eureka2003.java1234.com:2003/
都是一个效果;
这里本质是三个服务注册中心都有我们服务提供者的信息,等后面讲到服务发现和服务调用,我们通过一些策略(默认轮询),会去找对应的服务注册中心;通过集群,能减轻每个服务注册中心的压力;