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

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

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

搭建服务注册中心

注册服务提供者

服务发现和消费

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

一、搭建服务注册中心

先列出完整目录结构:

搭建过程如下:

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

修改pom文件,引入依赖

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

创建启动类

/***

* @EnableEurekaServer

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

@SpringBootApplicationpublic classEurekaApp {public static voidmain(String[] args) {

SpringApplication.run(EurekaApp.class, args);

}

}

配置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

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

二、注册服务提供者

先列出完整目录结构:

搭建过程如下:

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

修改pom文件,引入依赖

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

创建启动类

/***

*

* @EnableDiscoveryClient

* 让服务使用eureka服务器

* 实现服务注册和发现

**/@EnableDiscoveryClient

@SpringBootApplicationpublic classHelloApp {public static voidmain(String[] args) {

SpringApplication.run(HelloApp.class, args);

}

}

创建controller

@RestControllerpublic classHelloController {

Logger logger= LoggerFactory.getLogger(HelloController.class);

@Autowired

DiscoveryClient discoveryClient;

@RequestMapping("/hello")publicString hello() {

ServiceInstance instance=discoveryClient.getLocalServiceInstance();//打印服务的服务id

logger.info("*********" +instance.getServiceId());return "hello,this is hello-service";

}

}

配置application.properties文件

server.port=9090#设置服务名

spring.application.name=hello-service

#设置服务注册中心的URL,本服务要向该服务注册中心注册自己

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

启动并测试)启动后再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)

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

三、服务发现和消费

完整目录结构如下:

搭建过程:

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

修改pom文件,引入依赖

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的依赖

创建启动类

@EnableDiscoveryClient

@SpringBootApplicationpublic classConsumerApp {//@Bean 应用在方法上,用来将方法返回值设为为bean

@Bean

@LoadBalanced//@LoadBalanced实现负载均衡

publicRestTemplate restTemplate() {return newRestTemplate();

}public static voidmain(String[] args) {

SpringApplication.run(ConsumerApp.class, args);

}

}

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

创建controller

@RestControllerpublic classConsumerController {//这里注入的restTemplate就是在com.sam.ConsumerApp中通过@Bean配置的实例

@Autowired

RestTemplate restTemplate;

@RequestMapping("/hello-consumer")publicString helloConsumer() {//调用hello-service服务,注意这里用的是服务名,而不是具体的ip+port

restTemplate.getForObject("http://hello-service/hello", String.class);return "hello consumer finish !!!";

}

}

配置application.properties文件

server.port=9999spring.application.name=hello-consumer

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

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

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

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

)启动hello-consumer

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

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

四、总结

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

通过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进行开发,有兴趣的朋友可以自行百度了解下。

eureka java_spring cloud 入门系列二:使用Eureka 进行服务治理相关推荐

  1. java断路器原理_spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护...

    在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...

  2. 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程

    机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程) 目录(?)[+] 一多变量的线性回归 二批处理 三特征缩放 四正规方程 五多变量非线性回归 一.多变量的线性回归 在#机 ...

  3. C语言速看,C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  4. Quantopian 入门系列二 - 流水线 (下)

    本文含 8225 字,28 图表截屏 建议阅读 42 分钟 本贴接着上贴[Quantopian 入门系列二 - 流水线 (上)]的内容,讨论下面目录的 5- 8 节: 简介 因子 筛选器 分类器 掩码 ...

  5. Reflex WMS入门系列二十五:将叉车纳入系统进行管理

    Reflex WMS入门系列二十五:将叉车纳入系统进行管理 据笔者所知,SAP WM 模块里是不对仓库里常用的叉车等仓库管理工具进行管理的.笔者发现,Reflex WMS系统则会在很多仓库部门日常操作 ...

  6. Reflex WMS入门系列二十二:物料库存报表

    Reflex WMS入门系列二十二:物料库存报表 在Reflex WMS系统上,我们可以通过物料号查询它的HD列表,或者IPG列表.通过在其HD/IPG信息得知其库存数据.当然还可以通过如下方式直接获 ...

  7. Reflex WMS入门系列二十三:几个库存相关的报表

    Reflex WMS入门系列二十三:几个库存相关的报表 Reflex WMS系统作为一个主流的仓库管理软件系统,自然需要对仓库里的库存有多个角度的报表功能.比如常见的slow-moving, agin ...

  8. Reflex WMS入门系列二十六:合并托盘

    Reflex WMS入门系列二十六:合并托盘 仓库管理业务实践中,对于仓库里的库存,将几个零托合并成一个托,也是比较常见的作业.Reflex WMS系统自然要能支持这种合并托盘(Merge HDs)的 ...

  9. Reflex WMS入门系列二十八:空白标签打印

    Reflex WMS入门系列二十八:空白标签打印 贴在托盘上的标签,因托盘上的货物的移动,使用等缘故可能会导致标签丢失.在很多场景下又需要扫描托盘标签,所以Reflex WMS系统提供了打印空白标签的 ...

最新文章

  1. 学计算机为什么会突发,为什么电脑会突然自动重启?
  2. Xamarin Essentials教程数据传输DataTransfer
  3. python消费kafka逻辑处理导致cpu升高_请教:Python模块KafkaConsumer会被Kerberos的状态影响嘛?...
  4. 专注于网络安全的数据中心在莫斯科开通运营
  5. C++ 虚基类和抽象类关系
  6. Spring MVC和Thymeleaf:如何从模板访问数据
  7. python魔法函数(二)之__getitem__、__len__、__iter__
  8. EF中执行Sql语句
  9. 张孝祥JavaScript视频教程flash版
  10. Meanshift and Camshift
  11. 笔记本Windows7系统安装教程
  12. 科研小技巧——论文投稿视频制作指南
  13. 一部手机背后的小镇青年:吃着蜜糖、喝着毒药
  14. 《我想吃掉你的胰脏》观后感
  15. 使用 ktra 搭建私人 Cargo registry
  16. oracle 10g rac 配置物理dataguard系列4,配置 Oracle 10g 单实例物理dataguard和逻辑standby...
  17. Swagger 文档中文版,国产API 文档工具使用教程
  18. WEB前端 HTML 基本标签
  19. MT6572背光不够亮
  20. 将毫秒转换为年月日时分秒

热门文章

  1. 强网杯2021 BlueTeaming (内存取证)
  2. Python 一个判断对象是否是一个已知类型的函数-isinstance()
  3. python中函数的括号使用
  4. 三星.android beam,三星S Beam取代Android Beam
  5. 深度学习中学习率(lr:learn rate)和batchsize如何影响模型性能?
  6. torchvision.transforms包的使用
  7. IText实现url转pdf, 解决中文字体问题
  8. CET6级高频词(按频度)(700个)
  9. matlab处理abaqus_Abaqus/用Abaqus进行参数分析(python+maltab助攻)
  10. linux sql server硬件要求,SQL Server On Linux(20)—— SQL Server On Linux性能(6)——针对性能的配置(Linux层面)...