java 服务发现服务治理_spring cloud 使用Eureka 进行服务治理方法

本文介绍了如何使用Spring Cloud Eureka进行服务治理,包括搭建服务注册中心、注册服务提供者以及实现服务发现和消费。通过示例详细阐述了Eureka的使用,帮助理解微服务架构中的服务治理功能。
摘要由CSDN通过智能技术生成

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

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

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

搭建服务注册中心

注册服务提供者

服务发现和消费

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

一、搭建服务注册中心

先列出完整目录结构:

1d92eccb290297d22285d2cd45ce5a2e.png

搭建过程如下:

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

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

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">

4.0.0

com.sam

eureka

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

1.5.1.RELEASE

1.8

org.springframework.cloud

spring-cloud-dependencies

Camden.SR6

pom

import

org.springframework.cloud

spring-cloud-starter-eureka-server

3.创建启动类

/**

*

* @EnableEurekaServer

* 用来指定该项目为Eureka的服务注册中心

*/

@EnableEurekaServer

@SpringBootApplication

public class EurekaApp {

public static void main(String[] args) {

SpringApplication.run(EurekaApp.class, args);

}

}

4.配置application.properties文件

#设置tomcat服务端口号

server.port=1111

#设置服务名称

spring.application.name=eureka-service

eureka.instance.hostname=localhost

#注册中心不需要注册自己

eureka.client.register-with-eureka=false

#注册中心不需要去发现服务

eureka.client.fetch-registry=false

#设置服务注册中心的URL

eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

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

1b974547e1bd5e5ee2a8ec4e0ad22c68.png

二、注册服务提供者

先列出完整目录结构:

021e174ef03e4c087da66c6713c77a60.png

搭建过程如下:

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

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

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">

4.0.0

com.sam

hello-service

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

1.5.1.RELEASE

1.8

org.springframework.cloud

spring-cloud-dependencies

Camden.SR6

pom

import

org.springframework.cloud

spring-cloud-starter-eureka

3.创建启动类

/***

*

* @EnableDiscoveryClient

* 让服务使用eureka服务器

* 实现服务注册和发现

*

*/

@EnableDiscoveryClient

@SpringBootApplication

public class HelloApp {

public static void main(String[] args) {

SpringApplication.run(HelloApp.class, args);

}

}

4.创建controller

@RestController

public 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,会发现有服务注册到注册中心了

fe5d0fd3f43f6d541762341e356ba06b.png

三、服务发现和消费

完整目录结构如下:

ef2888f6a469a374bf2148d3a70243fc.png

搭建过程:

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

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

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">

4.0.0

com.sam

hello-consumer

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

1.5.1.RELEASE

1.8

org.springframework.cloud

spring-cloud-dependencies

Camden.SR6

pom

import

org.springframework.cloud

spring-cloud-starter-eureka

org.springframework.cloud

spring-cloud-starter-ribbon

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

3.创建启动类

@EnableDiscoveryClient

@SpringBootApplication

public 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

@RestController

public 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=9999

spring.application.name=hello-consumer

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka

#这里的配置项目和服务提供者hello-service一样

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

c2de66d5bc075b0767e5da3f6ac59595.png

361a41912fdb7d864970d744090daea8.png

7f3ea6846dc497388d850f81d5c9ced5.png

363ba98cf888ae0aa8624fb5a0788a88.png

以上是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());吗?对,就是这个打印)

1845ed53cc823cd9ddb1ae0eed36fcd0.png

ac1b6cafd5b7f59932d599361b2d1171.png

ae02740f5de8e6f7281cc1e688965545.png

fd88163802e741388bc2241f9a4dc012.png

四、总结

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

通过spring-cloud-starter-eureka-server和@EnableEurekaServer实现服务注册中心

通过spring-cloud-starter-eureka和@EnableDiscoveryClient使用并注册到服务注册中心

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值