注册到单节点Eureka Server
将编写如何将微服务注册到Eureka Server上
先创建一个子模块项目,用来放api接口,然后再创建一个子模块,充当提供者。
在提供者项目的pom文件中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
在提供者项目配置文件中添加以下配置
server:
port: 8000
spring:
application:
name: provider
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
server.port 指定项目端口号
spring.application.name 用于指定注册到Eureka Server 上的应用名称。
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ ,表示Erueka Server 注册中心的地址。
euraka.instance.prefer-ip-address=true 表示将自己的ip注册到Eureka Server,若不配置或者配置false,则表示微服务所有操作系统的hostname到Eureka Server。
在启动类上添加注解 @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class YmkProviderApplication {
public static void main(String[] args) {
SpringApplication.run(YmkProviderApplication.class, args);
}
}
在api子模块里添加一个接口
在提供者子模块里添加一个控制器,并实现api的接口。
@RestController
public class TestController implements TestService{
@Autowired
private TestService testService;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(String name) {
return "Hello "+name;
}
}
现在启动注册中心项目跟提供者项目,再次访问: http://localhost:8761/
可以看到,我们提供者成功的注册到了Eureka Server中了。
高可用Eureka Server注册中心
Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server实例彼此同步信息,从而确保所有节点数据一致。节点之间互相注册是Eureka Server的默认行为。
因为我们是在一台电脑上,所以先修改一下hosts文件,各个操作系统如何修改,还请自行百度。找到hosts后添加 127.0.0.1 peer1 peer2
修改原先Eureka Server项目的 application.yml 文件修改如下
spring:
application:
name: eureka-server
---
spring:
profiles: peer1 # 指定profile=peer1
server:
port: 8761
eureka:
instance:
hostname: peer1 # 指定当profile=peer1时,主机名是peer1
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/ # 将自己注册到peer2这个Eureka上面去
---
spring:
profiles: peer2 # 指定profile=peer2
server:
port: 8762
eureka:
instance:
hostname: peer2 # 指定当profile=peer2时,主机名是peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/ # 将自己注册到peer1这个Eureka上面去
通过以上分析,不难理解,我们定义了peer1和peer2两个Profile,当应用以peer1这个Profile启动时,配置改Eureka Serber的主机名是peer1,并将其注册到 http://peer2:8762/eureka/ 上面,反之亦然。
现在我们将项目打包成jar来运行,不再使用idea运行项目。
再idea中直接点击package即可,即可打成jar包
现在通过命令启动
java -jar /xxx/xx/xxxxx.jar --spring.profiles.active=xxx
通过spring.profiles.active指定启动哪个profile
比我我的两个Eureka Server分别是
java -jar /Users/yangmingkai/IdeaProjects/ymk/yang-spring-boot-cloud-parent/ymk-eureka-server/target/ymk-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar /Users/yangmingkai/IdeaProjects/ymk/yang-spring-boot-cloud-parent/ymk-eureka-server/target/ymk-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
我们发现两个已经互相注册了。
上面application.yml配置可以简化一些如下:
spring:
application:
name: eureka-server
eureka:
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/,http://peer1:8761/eureka/
---
spring:
profiles: peer1
server:
port: 8761
eureka:
instance:
hostname: peer1
---
spring:
profiles: peer2
server:
port: 8762
eureka:
instance:
hostname: peer2
至此高可用Euraka Server 搭建完成!
应用注册到Eureka Server集群上
只需要在提供者application.yml配置中修改 eureka: client: serviceUrl: defaultZone 配置多个Eureka Server 地址即可,逗号分隔开来
server:
port: 8000
spring:
application:
name: provider
eureka:
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/
instance:
prefer-ip-address: true
当然即使只配置某一个节点,也能正常注册到Eureka Server集群,因为前面说过Eureka Server之间会同步数据。
现在启动提供者项目
再去Eureka Server中看,就可以看到peer1跟peer2中都注册了这个服务。
源码地址 : https://download.csdn.net/download/u013083284/10748089