• Eureka快速入门


    微服务与传统项目的不同之处:

    1、微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务

    2、微服务可以将业务暴露为接口,供其它微服务使用

    3、不同微服务都应该有自己独立的数据库

    每一个模块只做自己分内的事情,每一个数据库也只存自己份内拥有的数据。


    需求分析 :

    现在有两个服务分别是订单服务和用户信息服务,由于每个服务只能提供单一的功能,所以我们想查询一个订单,并且在该订单的查询结果中显示订单的详情之外也显示订单所属用户的基本信息,显然根据微服务设计原则,订单模块只能查出订单的信息,无法查询出用户的信息,所以 下文都是围绕该问题进行书写。

     一、微服务初体验:

    下面采用最简单直接的方式实现上述的功能

    1、将RestTemplate对象注入到Spring容器。(通常在配置类或启动类注入)

    1. //在Spring Boot启动类注入
    2. @SpringBootApplication
    3. public class OrderApplication {
    4. public static void main(String[] args) {
    5. SpringApplication.run(OrderApplication.class, args);
    6. }
    7. //注入RestTemplate 对象
    8. @Bean
    9. public RestTemplate restTemplate(){
    10. return new RestTemplate();
    11. }
    12. }

    2、使用端调用get/postForObject来向不同的服务发送请求:

    1. @Service
    2. public class OrderService {
    3. @Autowired//注入对象
    4. private RestTemplate restTemplate;
    5. public Order queryOrderById(Long orderId) {
    6. // 1.查询订单
    7. Order order = orderMapper.findById(orderId);
    8. // TODO 2.查询用户
    9. String url = "http://localhost:8081/user/" + order.getUserId();
    10. //当传入类名时会自动返回对应的数据类型
    11. User user = restTemplate.getForObject(url, User.class);
    12. // 3.封装user信息
    13. order.setUser(user);
    14. // 4.返回
    15. return order;
    16. }
    17. }

    二、Eureka注册中心服务:

    1、Eureka原理讲解:

    通过上面的操作我们会发现一些问题:

    1、地址发生了硬编码。

    2、如果为了负载均衡提供了多个端口,有些挂掉了,我们就会访问挂掉的服务造成堵塞

    于是Eureka为我们做了如下的操作:

    1、消费者该如何获取服务提供者具体信息?

    • 服务提供者启动时向eureka注册自己的信息
    • eureka保存这些信息
    • 消费者根据服务名称向eureka拉取提供者信息

    2、如果有多个服务提供者,消费者该如何选择?

    • 服务消费者利用负载均衡算法,从服务列表中挑选一个

    3、消费者如何感知服务提供者健康状态?

    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
    • eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

    2、Eureka操作实现:

     1、创建Maven项目引入server服务端依赖:

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    4. dependency>

    2、编写启动类,添加@EnableEurekaServer注解:

    1. @SpringBootApplication
    2. //就加一个eureka的注解即可
    3. @EnableEurekaServer
    4. public class OrderApplication {
    5. public static void main(String[] args) {
    6. SpringApplication.run(OrderApplication.class, args);
    7. }
    8. }

    3、添加application.yml文件,编写配置信息:

    1. server:
    2. port: 10086 # eureka的端口
    3. spring:
    4. application:
    5. name: eurekaserver # eureka这个服务的名称
    6. eureka:
    7. client:
    8. service-url: #eureka的地址信息
    9. defaultZone: http://127.0.0.1:10086/eureka/

    3、Eureka注册服务:

    1、来到客户端,添加client客户端依赖:

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    4. dependency>

    2、来到客户端的yml文件,将其注册进去:

    1. spring:
    2. application:
    3. name: userservice # 微服务的名称,这个名称后期互相调用时候会用
    4. eureka:
    5. client:
    6. service-url: # eureka的地址信息
    7. defaultZone: http://127.0.0.1:10086/eureka/

    4、Eureka访问服务:

    在前几个步骤我们已经实现了 注册Eireka服务器->注册服务 此时我们就开始关注如何实现服务之间的访问。

    1、将之前的url修改为服务的地址:

    1. @Autowired
    2. private RestTemplate restTemplate;
    3. public Order queryOrderById(Long orderId) {
    4. // 1.查询订单
    5. Order order = orderMapper.findById(orderId);
    6. // 2.利用RestTemplate发起http请求,查询用户
    7. // 2.1.url路径
    8. String url = "http://userservice/user/" + order.getUserId();
    9. // 2.2.发送http请求,实现远程调用
    10. User user = restTemplate.getForObject(url, User.class);
    11. // 3.封装user到Order
    12. order.setUser(user);
    13. // 4.返回
    14. return order;
    15. }

    2、为了保证复杂均衡,在RestTemplate上添加复杂均衡@LoadBalanced注解:

    1. @Bean
    2. @LoadBalanced
    3. public RestTemplate restTemplate() {
    4. return new RestTemplate();
    5. }
  • 相关阅读:
    二叉树—相关计算题
    vue pc端/手机移动端 — 下载导出当前表格页面pdf格式
    Python爬虫:获取必应图片的下载链接
    木聚糖-聚乙二醇-牛血清白蛋白,BSA-PEG-Xylan,牛血清白蛋白-PEG-木聚糖
    有哪些好用的IT资产管理平台?
    扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速
    零钱兑换问题
    C++之OpenCV入门到提高003:矩阵的掩膜(Mask)处理
    MySQL索引设计与选择
    C语言迭代法求一个数的平方根。迭代公式:Xn+1=(Xn+a/Xn)/2,其中a是输入的数字
  • 原文地址:https://blog.csdn.net/weixin_60414376/article/details/126270350