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
- Jexus 负载均衡
- 用.NET Framework 2.0创建 Form设计器[翻译]
- jquery事件绑定
- Fontello:免费Web-font 图标大集合(font-face 图标集)
- 通过 wp-config.php 禁止安装、升级或编辑WordPress 主题与插件
- 利用VS2005中的Code Snippets提高开发效率
- 用schemaSpy制作数据库文档
- WordPress 投票插件Post Ratings,可在谷歌搜索显示星级投票(附中文包下载)
- Spark学习笔记——共享变量
- 如何升级Mono
- 使用信息架构视图访问数据库元数据
- Java 基础标识符
- 在Windows上玩转Mono/Linux
- Active Record和Domain Object + Dao
- 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 文档注释
- vue3.0新特性初体验(二)
- 数据结构算法操作试题(C++/Python)——有效的括号
- 数据结构算法操作试题(C++/Python)——合并两个有序链表
- Day11 :二进制中1的个数
- 数据结构算法操作试题(C++/Python)——括号生成
- 数据结构算法操作试题(C++/Python)——合并K个排序链表
- 数据结构算法操作试题(C++/Python)——删除排序数组中的重复项
- 数据结构算法操作试题(C++/Python)——k个一组翻转链表
- 数据结构算法操作试题(C++/Python)——移除元素
- 数据结构算法操作试题(C++/Python)——实现strStr()
- 数据结构算法操作试题(C++/Python)——两数相除
- JavaScript 测试系列实战(三):使用 Mock 模拟模块并处理组件交互
- 数据结构算法操作试题(C++/Python)——串联所有单词的子串
- TypeScript 实战算法系列(九):实现向量与矩阵
- TypeScript 实战算法系列(十):实现动态规划