eureka java_spring cloud 入门系列二:使用Eureka 进行服务治理
服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。
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 进行服务治理相关推荐
- java断路器原理_spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护...
在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...
- 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程
机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程) 目录(?)[+] 一多变量的线性回归 二批处理 三特征缩放 四正规方程 五多变量非线性回归 一.多变量的线性回归 在#机 ...
- C语言速看,C语言高速入门系列(二)
C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...
- Quantopian 入门系列二 - 流水线 (下)
本文含 8225 字,28 图表截屏 建议阅读 42 分钟 本贴接着上贴[Quantopian 入门系列二 - 流水线 (上)]的内容,讨论下面目录的 5- 8 节: 简介 因子 筛选器 分类器 掩码 ...
- Reflex WMS入门系列二十五:将叉车纳入系统进行管理
Reflex WMS入门系列二十五:将叉车纳入系统进行管理 据笔者所知,SAP WM 模块里是不对仓库里常用的叉车等仓库管理工具进行管理的.笔者发现,Reflex WMS系统则会在很多仓库部门日常操作 ...
- Reflex WMS入门系列二十二:物料库存报表
Reflex WMS入门系列二十二:物料库存报表 在Reflex WMS系统上,我们可以通过物料号查询它的HD列表,或者IPG列表.通过在其HD/IPG信息得知其库存数据.当然还可以通过如下方式直接获 ...
- Reflex WMS入门系列二十三:几个库存相关的报表
Reflex WMS入门系列二十三:几个库存相关的报表 Reflex WMS系统作为一个主流的仓库管理软件系统,自然需要对仓库里的库存有多个角度的报表功能.比如常见的slow-moving, agin ...
- Reflex WMS入门系列二十六:合并托盘
Reflex WMS入门系列二十六:合并托盘 仓库管理业务实践中,对于仓库里的库存,将几个零托合并成一个托,也是比较常见的作业.Reflex WMS系统自然要能支持这种合并托盘(Merge HDs)的 ...
- Reflex WMS入门系列二十八:空白标签打印
Reflex WMS入门系列二十八:空白标签打印 贴在托盘上的标签,因托盘上的货物的移动,使用等缘故可能会导致标签丢失.在很多场景下又需要扫描托盘标签,所以Reflex WMS系统提供了打印空白标签的 ...
最新文章
- 学计算机为什么会突发,为什么电脑会突然自动重启?
- Xamarin Essentials教程数据传输DataTransfer
- python消费kafka逻辑处理导致cpu升高_请教:Python模块KafkaConsumer会被Kerberos的状态影响嘛?...
- 专注于网络安全的数据中心在莫斯科开通运营
- C++ 虚基类和抽象类关系
- Spring MVC和Thymeleaf:如何从模板访问数据
- python魔法函数(二)之__getitem__、__len__、__iter__
- EF中执行Sql语句
- 张孝祥JavaScript视频教程flash版
- Meanshift and Camshift
- 笔记本Windows7系统安装教程
- 科研小技巧——论文投稿视频制作指南
- 一部手机背后的小镇青年:吃着蜜糖、喝着毒药
- 《我想吃掉你的胰脏》观后感
- 使用 ktra 搭建私人 Cargo registry
- oracle 10g rac 配置物理dataguard系列4,配置 Oracle 10g 单实例物理dataguard和逻辑standby...
- Swagger 文档中文版,国产API 文档工具使用教程
- WEB前端 HTML 基本标签
- MT6572背光不够亮
- 将毫秒转换为年月日时分秒
热门文章
- 强网杯2021 BlueTeaming (内存取证)
- Python 一个判断对象是否是一个已知类型的函数-isinstance()
- python中函数的括号使用
- 三星.android beam,三星S Beam取代Android Beam
- 深度学习中学习率(lr:learn rate)和batchsize如何影响模型性能?
- torchvision.transforms包的使用
- IText实现url转pdf, 解决中文字体问题
- CET6级高频词(按频度)(700个)
- matlab处理abaqus_Abaqus/用Abaqus进行参数分析(python+maltab助攻)
- linux sql server硬件要求,SQL Server On Linux(20)—— SQL Server On Linux性能(6)——针对性能的配置(Linux层面)...