Spring Cloud微服务的服务治理组件eureka(二)
目录
一、背景
最初实现微服务的系统可能服务并不多,可以通过静态配置完成服务的调用,需要手工维护服务的清单。但是随着系统的发展,系统功能越来越复杂,相应的微服务应用也不断增加,静态配置越来越难以维护,随着不断的发展,我们的集群规模,服务位置,服务命名也会发生变化,如果还是通过手工维护,及易发生错误,和命名冲突,同时维护将大量消耗人力。为了解决微服务架构中服务实例维护问题。出现了大量的围绕服务注册,服务发现的自动化管理的微服务框架。
- 服务注册:在服务治理框架中,通常会构建一个服务注册中心,每个服务单元向注册中心登记自己的服务,将主机、端口、版本号、和通信协议和一些附加信息告知注册中心。注册中心按服务名分类组织服务清单
- 服务发现:服务治理框架下,通过服务名,发起请求调用实现,因此,服务消费方在调用服务提供方的接口时,并不知道具体的实例位置地址,服务调用方需要向注册中心咨询服务,湖区服务清单。
二、eureka服务提供者搭建
开发工具:idea
1、File---> New ---> Project---->spring Initialzr
2、填写项目包名、项目名,继续NEXT
3、选中Discovery Client和web模块、Next-->(选择项目目录)Finish
4、项目生成后目录结构如下,其中controller为新建的包,其他文件及目录是默认生成的
5、我们来看看pom.xml
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 4 </dependency> 5 <dependency> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-web</artifactId> 8 </dependency>
6、启动类加上EnableDiscoveryClient注解,自动化配置为服务治理的客户端
@EnableDiscoveryClient @SpringBootApplication public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } }
7、application.properities配置
1 server.port=8082 2 spring.application.name=eureka-client
#注册的服务中心的路径,这里注册了多个代表注册了一个服务中心集群 3 eureka.client.service-url.defaultZone=http://admin:123456@localhost:1111/eureka/,http://admin:123456@localhost:1112/eureka/ 4 #IP进行注册 5 eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} 6 eureka.instance.preferIpAddress=true
8、Controller提供服务请求入口。
1 @RestController 2 public class DemoController { 3 4 private static final Logger logger = LoggerFactory.getLogger(DemoController.class); 5 6 7 @RequestMapping(value = "/demo") 8 public String index(@RequestParam("name") String demo_name){ 9 return "Hello world|| I'm "+demo_name; 10 } 11 12 }
9、点击以下图标启动服务
出现以下日志代码启动成功
10、访问注册中心localhost:1111,出现一个实例就是我们刚才注册的
三、高可用集群
另建一个项目eureka-client2
项目依赖相同
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
配置类似,application一样,提供集群服务,端口不一样
server.port=8083 spring.application.name=eureka-client eureka.client.service-url.defaultZone=http://admin:123456@localhost:1111/eureka/,http://admin:123456@localhost:1112/eureka/ #IP进行注册 eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} eureka.instance.preferIpAddress=true
@EnableDiscoveryClient @SpringBootApplication public class EurekaClient2Application { public static void main(String[] args) { SpringApplication.run(EurekaClient2Application.class, args); } }
@RestController public class DemoController { private static final Logger logger = LoggerFactory.getLogger(DemoController.class); @RequestMapping(value = "/demo") public String index(@RequestParam("name") String demo_name){ return "Hello world cleint2|I'm "+demo_name; } }
至此,高可用服务提供方就搭建成功了。
如果我看的更远,那是因为站在巨人的肩膀上!