内容简介:在SpringCloud微服务体系中,有几个比较重要的组件,如注册中心,配置中心,网关,安全、负载均衡、监控等等,接下来我们将来看一下这些常用的组件有什么用,在微服务架构下的该怎么用。本文为为第一篇,注册中心Eureka的使用说明注册中心,主要的核心点是服务的注册与发现。
在SpringCloud微服务体系中,有几个比较重要的组件,如注册中心,配置中心,网关,安全、负载均衡、监控等等,接下来我们将来看一下这些常用的组件有什么用,在微服务架构下的该怎么用。
本文为为第一篇,注册中心Eureka的使用说明
I. 基本介绍
1. 注册中心
注册中心,主要的核心点是服务的注册与发现。
简单来讲,就是我们的所有服务都会在注册中心上标识自己,注册中心统一管理所有的服务名与具体的应用之间的映射关系,这样微服务之间的访问,就可以直接通过服务名来相互通信,相比较于直接通过ip端口的访问,这样的好处是当某个服务下线、新增或者换了机器,对调用者而言,只要维持一份注册中心的最新映射表即可,不需要其他任何改动逻辑。
我们通常可用的注册中心有 Eureka
, Consul
, Zookeeper
, nacos
等,在我们后续的教程中会逐一进行介绍
Eureka2.x 闭源,1.x虽然可用,但新项目的话不建议再使用它,比如 Consul
, nacos
都是不错的选择
如果出于学习的目的,或者由于历史原因(比如我),学习了解一下Eureka知识点也没什么坏处
2. Eureka
Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务,通常包含Server和Client端
原理如下图
- server: 提供服务注册,并在服务注册表中存储所有可用服务节点的信息
- client: 简化与Server之间的交互,比如封装了发送心跳,获取注册信息表等基本操作
II. 实例演示
1. 版本说明
后续的演示项目中,我们的环境与版本信息如下
2.2.1.RELEASE Hoxton.M2
2. Eureka Server端
Eureka区分了Server和Client两端,即我们有一个独立的注册中心服务,其他的微服务则作为Client端
Server端核心依赖如下
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
然后在配置文件中,添加一些基本信息
server: port: 8081 #服务注册中心端口号 eureka: instance: hostname: 127.0.0.1 #服务注册中心IP地址 client: registerWithEureka: false #是否向服务注册中心注册自己 fetchRegistry: false #是否检索服务 serviceUrl: #服务注册中心的配置内容,指定服务注册中心的位置 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
请注意,上面的 registerWithEureka
这个配置,设置为false,不像自己注册服务(后续会介绍多个Eureka实例时,可以如何配置)
然后再启动类上,添加注解 @EnableEurekaServer
来申明Eureka服务
@EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
到此,一个Eureka服务端已经完成,此时我们可以直接访问 http://localhost:8081
,会看到一个自带的控制台,会提供一些基本信息
3. Eureka 客户端
我们这里设计两个客户端,一个提供服务,另外一个调用,演示一下Eureka的基本功能
a. 客户端 eureka-service-provider
客户端需要在pom文件中,添加下面的关键依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
接下来需要在配置文件中,指定注册中心的地址,以及服务名(请注意,这个服务名是重要线索,后面会用到!!!)
server: port: 8082 #服务端口号 eureka: client: serviceUrl: #注册中心的注册地址 defaultZone: http://127.0.0.1:8081/eureka/ spring: application: name: eureka-service-provider #服务名称--调用的时候根据名称来调用该服务的方法
同样的需要在启动类上,通过 @EnableEurekaClient
来标注客户端
@EnableEurekaClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } }
我们在这个项目中,写一个基本REST接口,供后面的服务进行调用
@RestController @RequestMapping(path = "userService") public class UserService { @Override @RequestMapping(path = "/getUserById") public UserDTO getUserById(@RequestParam long userId) { UserDTO userDTO = new UserDTO(); userDTO.setUserId(userId); userDTO.setNickname("一灰灰blog"); userDTO.setUserName("yihuihuiblog"); userDTO.setPhone(88888888L); return userDTO; } }
再看一下上面的实现,你会发现和平时写的Controller没有任何的区别
到这里第一个Eureka客户端已经完成,并提供了一个REST接口,接下来我们开始写第二个Eureka客户端,用来访问上面的REST服务
b. 客户端 eureka-service-consumer
基本的流程和上面没有任何区别,只是将配置文件稍微改一下
server: port: 8083 #服务端口号 eureka: client: serviceUrl: #注册中心的注册地址 defaultZone: http://127.0.0.1:8081/eureka/ spring: application: name: eureka-service-consumer #服务名称--调用的时候根据名称来调用该服务的方法
那么在这个服务中,如何访问 eureka-service-provider
提供的服务呢?
- 通过
RestTemplate
来实现
请注意,这个RestTemplate和我们普通的 new RestTemplate()
创建的不一样哦,我们是通过如下方式获取实例
@Bean @LoadBalanced public RestTemplate rest() { return new RestTemplate(); }
重点关注方法上的 @LoadBalanced
注解,这个会在后续的Ribbon的章节中深入介绍,在这里只需要知道通过它生成的 RestTemplate
,在发起访问时,会借助Eureka的注册信息表,将服务名翻译为对应的 ip+端口号
接下来就是我们的访问环节,写法如下
@Autowired private RestTemplate restTemplate; @GetMapping(path = "uid") public String getUser(int userId) { UserDTO dto = restTemplate .getForObject("http://eureka-service-provider/userService/getUserById?userId=" + userId, UserDTO.class); return userId + "'s info: " + dto; }
请着重看一下访问的url: "http://eureka-service-provider/userService/getUserById?userId=" + userId
,这里没有域名,没有ip,是直接通过服务名进行访问的
4. 测试与小结
我们依次将上面的Server和两个Client启动,然后访问 http://localhost:8081
,查看Eureka控制台,可以看到如下界面,两个客户端都已经注册好了
然后再测试一下通过consumer访问provider的服务
到此Eureka的核心功能已经演示完毕,当然如果仅仅只是这样,这个学习成本好像很低了,作为一个有思考的小青年,看了上面的流程自然会有几个疑问
- 安全问题
- 注册中心控制台直接访问,这要是暴露出去了…
- 一个Eureka实例,单点故障怎么解
- 服务注册多久生效?服务下线多久会从注册信息表中摘除?服务存活判断是怎样的?
- 通过
RestTemplate
方式使用,很不优雅啊,有没有类似rmi的通过类调用的方式呢?
II. 其他
0. 项目
1. 一灰灰Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
- 一灰灰Blog个人博客 https://blog.hhui.top
- 一灰灰Blog-Spring专题博客 http://spring.hhui.top
打赏 如果觉得我的文章对您有帮助,请随意打赏。
以上所述就是小编给大家介绍的《【SpringCloud系列】Eureka注册中心初体验》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 降低云游戏延迟优化云游戏体验:贝塞斯达推出Orion技术,还公布了免费体验计划
- PyTorch 初体验
- indexedDB 初体验
- golang爬虫初体验
- Netty 入门初体验
- Ansible初体验
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机程序的构造和解释
Harold Abelson、Gerald Jay Sussman、Julie Sussman / 裘宗燕 / 机械工业出版社 / 2004-2 / 45.00元
《计算机程序的构造和解释(原书第2版)》1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版。在过去的二十多年里,《计算机程序的构造和解释(原书第2版)》对于计算机科学的教育计划产生了深刻的影响。第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。 海报:一起来看看 《计算机程序的构造和解释》 这本书的介绍吧!