SpringCloud初体验--Hello Eureka
Spring Cloud Eureka是Spring Cloud Netflix中的一部分,基于Netflix Eureka做了二次封装,主要负责微服务架构中的服务治理。
服务治理主要是用来实现各个微服务实例的自动化注册与发现。
主要功能:
服务注册
每个服务单元向服务中心等级自己提供的服务,将主机号、端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。
服务注册中心还需要以心跳的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除,达到排除故障服务的效果。
服务发现
服务向服务注册中心发起调用,便从服务清单中以某种轮询策略取出一个位置来进行服务调用。
Netflix Eureka包含了服务端和客户端组件,均由java实现,主要适用于Java实现的分布式系统,或是JVM兼容语言构建的系统。Eureka服务端的服务治理机制提供了完备的Restful Api,所以也支持非JVM语言构建的微服务,只是其他语言需要自己实现Eureka服务端程序。
Eureka服务端:服务注册中心。
Eureka客户端:主要处理服务注册与发现。
接下来是服务端的代码部分。
基于SpringBoot项目的基础上,pom文件增加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
下面是启动类,可以看出启动类和普通的springboot启动类差别不大,只是增加了@EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
下面是服务端的application.properties
server.port=1111
spring.application.name = eureka-server
eureka.instance.hostname=localhost
# 因为是服务注册中心,所以不向服务注册中心注册自己
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
配置完可以直接登录localhost:1111
可以看到暂时还没有注册任何服务。没有关系,接下来我们搭建客户端。
以下是Eureka客户端代码,因为为我们要测试,需要restful api,所以除了Eureka的客户端以外,还要引入SpringMVC
基于SpringBoot项目的基础上,pom文件增加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
下面是启动类,可以看出启动类和普通的springboot启动类差别不大,只是增加了@EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
下面是客户端的application.properties
server.port=8080
spring.application.name = eureka-client
#eureka.instance.hostname=eureka-client
#下面是之前注册的Eureka服务端地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
然后我们再新增一个HelloController,用于测试。
@RestController
public class HelloController {
private final Logger logger = Logger.getLogger("HelloController");
@Autowired
private DiscoveryClient client;
@Autowired
private Registration registration;
@RequestMapping("/hello")
public String index() {
ServiceInstance instance = client.getInstances(registration.getServiceId()).get(0);
logger.info("/hello,host: " + instance.getHost() + " , service_id: " + instance.getServiceId());
return "Hello World!";
}
}
我们可以刷新一下http://localhost:1111/
这时候我们的服务就已经注册上去了,尝试访问一下HelloController,打印出如下日志。
2020-04-12 14:23:59.209 INFO 20100 --- [nio-8080-exec-7] HelloController: /hello,host: eureka-client , service_id: EUREKA-CLIENT
- 编程思想 之「对象漫谈」
- Github 项目推荐 | TensorFlow 概率推理工具集 —— probability
- Github 项目推荐 | 用于 C/C++、Java、Matlab/Octave 的特征选择工具箱
- Mercari Price 比赛分享 —— 语言不仅是算法和公式而已
- Github 项目推荐 | GAN 的 Keras 实现案例集合 —— Keras-GAN
- Github 项目推荐 | 微软开源 MMdnn,模型可在多框架间转换
- 半自动化运维之动态添加数据文件(一) (r5笔记第55天)
- 半自动化运维之动态添加数据文件(二) (r5笔记第56天)
- 11g Active DataGuard初探(r5笔记第54天)
- Github 项目推荐 | 用于构建端对端对话系统和训练聊天机器人的开源库 —— DeepPavlov
- 我身边的一些数据库事故 (r5笔记第52天)
- 一个清理脚本的改进思路(r5笔记第51天)
- 【专业技术】Python爬虫:抓取手机APP的传输数据
- 海量数据迁移之传输表空间(一) (r5笔记第71天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Mysql优化概述及其压力测试工具
- 第019课 I2C协议详解及裸机程序分析
- Redis适配采坑记
- 笔记 GWAS 操作流程6-2:手动计算GWAS分析中的GLM和Logistic模型
- 记录一次生产环境中Redis内存增长异常排查全流程!
- 移植tslib库出现selected device is not a touchscreen I understand的解决方法
- 【PHP】使用dirname(__FILE__)把目录定在需要引用的文件目录下
- php导出大量数据到excel使用轻量级的PHP_XLSXWriter比用phpexcel效率更高,2020年9月10日实测!
- 【前端JQ】使用js或jquery使button按钮变为不可用状态,并改变button上的值。
- 彻底看懂RocketMQ事务实现原理
- Tomcat NIO(10)-IO线程-关键类
- 一文揭开操作系统的神秘面纱
- Dubbo日志链路追踪TraceId选型
- 最全总结 | 聊聊 Python 数据处理全家桶(Memcached篇)
- Linux内核平台总线设备驱动模型浅析