首页 > 开发 > Java > 正文

spring cloud 使用Eureka 进行服务治理方法

2024-07-14 08:40:32
字体:
来源:转载
供稿:网友

服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。

Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能。

本文通过简单的小例子来分享下如何通过Eureka进行服务治理:

  1. 搭建服务注册中心
  2. 注册服务提供者
  3. 服务发现和消费

==========我是华丽的分割线========================

一、搭建服务注册中心

先列出完整目录结构:

spring,cloud,Eureka,服务治理,springcloud

搭建过程如下:

1.创建maven工程:eureka(具体实现略)

2.修改pom文件,引入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sam</groupId> <artifactId>eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>1.5.1.RELEASE</version> </parent> <properties>  <javaVersion>1.8</javaVersion> </properties> <!-- 使用dependencyManagement进行版本管理 --> <dependencyManagement>  <dependencies>   <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-dependencies</artifactId>    <version>Camden.SR6</version>    <type>pom</type>    <scope>import</scope>   </dependency>  </dependencies> </dependencyManagement> <dependencies>  <!-- 引入eureka server依赖 -->  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-eureka-server</artifactId>  </dependency> </dependencies></project>

3.创建启动类

/** *  * @EnableEurekaServer * 用来指定该项目为Eureka的服务注册中心 */@EnableEurekaServer@SpringBootApplicationpublic class EurekaApp { public static void main(String[] args) {  SpringApplication.run(EurekaApp.class, args); }}

4.配置application.properties文件

#设置tomcat服务端口号server.port=1111#设置服务名称spring.application.name=eureka-serviceeureka.instance.hostname=localhost#注册中心不需要注册自己eureka.client.register-with-eureka=false#注册中心不需要去发现服务eureka.client.fetch-registry=false#设置服务注册中心的URLeureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

5.启动服务并访问,我们会看到这样的画面:

spring,cloud,Eureka,服务治理,springcloud

二、注册服务提供者

先列出完整目录结构:

spring,cloud,Eureka,服务治理,springcloud

搭建过程如下:

1.创建maven工程:hello-service(具体实现略)

2.修改pom文件,引入依赖

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sam</groupId> <artifactId>hello-service</artifactId> <version>0.0.1-SNAPSHOT</version> <parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>1.5.1.RELEASE</version> </parent> <properties>  <javaVersion>1.8</javaVersion> </properties> <dependencyManagement>  <dependencies>   <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-dependencies</artifactId>    <version>Camden.SR6</version>    <type>pom</type>    <scope>import</scope>   </dependency>  </dependencies> </dependencyManagement> <dependencies>  <!-- 引入eureka 客户端依赖 -->  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-eureka</artifactId>  </dependency> </dependencies></project>

3.创建启动类

/*** *  * @EnableDiscoveryClient * 让服务使用eureka服务器 * 实现服务注册和发现 * */@EnableDiscoveryClient@SpringBootApplicationpublic class HelloApp { public static void main(String[] args) {  SpringApplication.run(HelloApp.class, args); }}

4.创建controller

@RestControllerpublic class HelloController { Logger logger = LoggerFactory.getLogger(HelloController.class); @Autowired DiscoveryClient discoveryClient;  @RequestMapping("/hello") public String hello() {  ServiceInstance instance = discoveryClient.getLocalServiceInstance();  //打印服务的服务id  logger.info("*********" + instance.getServiceId());  return "hello,this is hello-service"; }}

5.配置application.properties文件

server.port=9090#设置服务名spring.application.name=hello-service#设置服务注册中心的URL,本服务要向该服务注册中心注册自己eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka

6.启动并测试

1.)启动后再hello-service的控制台会有这种字样(xxx代表你的PC名)

 

复制代码 代码如下:
Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)

 

eureka的控制台会打印出如下字样(xxx代表你的PC名)

 

复制代码 代码如下:
Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)

 

2.)再次访问localhost:1111,会发现有服务注册到注册中心了

spring,cloud,Eureka,服务治理,springcloud

三、服务发现和消费

完整目录结构如下:

spring,cloud,Eureka,服务治理,springcloud

搭建过程:

1.创建maven工程(具体实现略)

2.修改pom文件,引入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sam</groupId> <artifactId>hello-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>1.5.1.RELEASE</version> </parent> <properties>  <javaVersion>1.8</javaVersion> </properties> <dependencyManagement>  <dependencies>   <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-dependencies</artifactId>    <version>Camden.SR6</version>    <type>pom</type>    <scope>import</scope>   </dependency>  </dependencies> </dependencyManagement> <dependencies>  <!-- 引入eureka 客户端依赖 -->  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-eureka</artifactId>  </dependency>  <!-- 引入ribbon 依赖 ,用来实现负载均衡,我们这里只是使用,先不作其他介绍-->  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-ribbon</artifactId>  </dependency> </dependencies></project>

这里比hello-service服务提供者,多了ribbon的依赖

3.创建启动类

@EnableDiscoveryClient@SpringBootApplicationpublic class ConsumerApp { //@Bean 应用在方法上,用来将方法返回值设为为bean @Bean @LoadBalanced //@LoadBalanced实现负载均衡 public RestTemplate restTemplate() {  return new RestTemplate(); }  public static void main(String[] args) {  SpringApplication.run(ConsumerApp.class, args); }}

这里也要用到@EnableDiscoveryClient, 让服务使用eureka服务器, 实现服务注册和发现 

4.创建controller

@RestControllerpublic class ConsumerController { //这里注入的restTemplate就是在com.sam.ConsumerApp中通过@Bean配置的实例 @Autowired RestTemplate restTemplate; @RequestMapping("/hello-consumer") public String helloConsumer() {  //调用hello-service服务,注意这里用的是服务名,而不是具体的ip+port  restTemplate.getForObject("http://hello-service/hello", String.class);  return "hello consumer finish !!!"; }}

5.配置application.properties文件

server.port=9999spring.application.name=hello-consumereureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka#这里的配置项目和服务提供者hello-service一样

6.启动,测试1.)启动eureka。为了展示负责均衡的效果,我们的hello-service启动两个服务,启动两个服务的具体步骤如下

spring,cloud,Eureka,服务治理,springcloud

spring,cloud,Eureka,服务治理,springcloud

spring,cloud,Eureka,服务治理,springcloud

spring,cloud,Eureka,服务治理,springcloud

以上是hello-service1的启动步骤,端口号为9090;同样方法设置hello-service2,端口号为9091(具体实现略)。

2.)启动hello-consumer

3.)再次访问http://localhost:1111/,会发现有2个hello-service服务(端口号一个是9090,一个是9091),1个hello-consume服务

4.) 多次访问http://localhost:9999/hello-consumer,会发现hello-service1和hello-service2会轮流被调用(已经实现了负责均衡),可以通过两者的控制台打印内容确认(还记得我们在hello-service的controller中有个loggerlogger.info("*********" + instance.getServiceId());吗?对,就是这个打印)

spring,cloud,Eureka,服务治理,springcloud

spring,cloud,Eureka,服务治理,springcloud

spring,cloud,Eureka,服务治理,springcloud

spring,cloud,Eureka,服务治理,springcloud

四、总结

以上实例实现了基本的服务治理:

  1. 通过spring-cloud-starter-eureka-server和@EnableEurekaServer实现服务注册中心
  2. 通过spring-cloud-starter-eureka和@EnableDiscoveryClient使用并注册到服务注册中心
  3. 通过spring-cloud-starter-eureka和@EnableDiscoveryClient使用注册中心并发现服务,通过spring-cloud-starter-ribbon来实现负载均衡消费服务

PS:这里说明下,我用的IDE是Spring Tool Suite,是spring定制版的eclipse,方便我们使用spring进行开发,有兴趣的朋友可以自行百度了解下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表