微服务入门:服务拆分与Eureka

}

public Order queryOrderById(Long orderId) {

    // 1.查询订单

    Order order = orderMapper.findById(orderId);

    // 2.返回

    return order;

}



user-service前端控制器:根据id查询用户信息



@GetMapping("/{id}")

public User queryById(@PathVariable("id") Long id) {

    return userService.queryById(id);

}

public User queryById(Long id) {

    return userMapper.findById(id);

}



> 思路:**要想查询订单的信息返回的数据需要有用户信息,那只需要在service层查询出订单信息之后,再利用订单信息中的用户id,像Axios那样访问user-service层的接口,根据id获取到用户信息,接着返回一个User实体类,订单利用set方法给成员变量中的User赋值即可**



首先,现在order-service模块将RestTemplate注入到spring容器中



@SpringBootApplication

public class OrderApplication {

public static void main(String[] args) {

    SpringApplication.run(OrderApplication.class, args);

}



/**

 * 完成RestTemplate并注入到spring容器中

 * @return

 */

//负载均衡

@Bean

public RestTemplate restTemplate(){

    return new RestTemplate();

}

}




接着在service层访问user-service层的接口



public Order queryOrderById(Long orderId) {

    // 1.查询订单

    Order order = orderMapper.findById(orderId);

    //2.利用RestTemplate查询用户

    String url = "http://loaclhost:8081/user/"+order.getUserId();

    //restTemplate传递一个User.clss过去目的是为了返回不是一个json,而是返回一个实体类

    User user = restTemplate.getForObject(url, User.class);

    //3.封装user信息

    order.setUser(user);

    // 4.返回

    return order;

}



接下来同时运行两个服务,在浏览器上请求order-service的接口,就可以得到一条json数据



{

“id”: 101,

“price”: 699900,

“name”: "Apple 苹果 iPhone 12 ",

“num”: 1,

“userId”: 1,

“user”: {

"id": 1,

"username": "张三",

"address": "广东湛江"

}

}




* * *



[]( )三、Eureka注册中心

===============================================================================



> 上面服务拆分部分不难看出,在restTemplate调用的url中,url以及耦合死了,这明显也是不利于后期的维护

> 

> 并且如果有多个相同的服务该如何选择调用?

> 

> 我们又怎么知道每个服务的健康情况?

> 

> 因此,这里就需要**Eureka**注册中心

> 

> 作用:

> 

> 1.  注册服务信息,服务提供者启动时向eureka注册自己的信息

> 2.  拉去服务(user-service),根据服务名称向eureka拉取提供者信息

> 3.  负载均衡(相同的服务选择哪一个?),从服务列表中挑选一个

> 4.  远程调用

> 5.  服务提供者每30s会向Eureka发送一次心跳续约,以便Eureka知道服务提供者的健康状况,心跳不正常者会被剔除



![在这里插入图片描述](https://img-blog.csdnimg.cn/c413b509f38a48e2b55a7d856d9e9bee.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbW3lpKnlpKnlhplidWc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)



> Eureka包含两个组件:Eureka Server和Eureka Client。

> 

> Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

> 

> Eureka Client是一个[java]( )客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的[负载均衡器]( )。



* * *



[]( )1、Eureka注册中心实现步骤

-----------------------------------------------------------------------------------



(1)新建一个模块,导入eureka客户端依赖



<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>



(2)配置Eureka相关信息



spring:

application:

name: eurkaserber #服务名称

eureka:

client:

service-url:  #eureka地址信息

  defaultZone: http://127.0.0.1:10086/eureka



(3)打开Eureka自动装配开关



//eureka自动装配开关

@EnableEurekaServer

@SpringBootApplication

public class EurekaAplication {

public static void main(String[] args) {

    SpringApplication.run(EurekaAplication.class, args);

}

}




(4)注册服务



*   先在要注册的服务中引入依赖

    

    ```

    <!--eureka客户端-->

    <dependency>

    	<groupId>org.springframework.cloud</groupId>

    	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

    </dependency>

    

    ```

    

*   在要注册的服务填写有关Ereka配置信息

    

    ```

    spring:

      application:

        name: userservice #userservice的服务名称

    eureka:

      client:

        service-url:  #eureka地址信息

          defaultZone: http://127.0.0.1:10086/eureka

    

    ```

    

*   在order-service中添加负载均衡注解

    

    ```

    @MapperScan("cn.itcast.order.mapper")

    @SpringBootApplication

    public class OrderApplication {

    

        public static void main(String[] args) {

            SpringApplication.run(OrderApplication.class, args);

        }

    

        /**

         * 完成RestTemplate并注入到spring容器中

         * @return

         */

        //负载均衡

        @LoadBalanced

        @Bean

        public RestTemplate restTemplate(){

            return new RestTemplate();

        }

    

    }

    

    ```

    

*   order-service同上操作,只是服务名称改变

    



> **注意的是,千万不要端口号重复了,我这里Eureka的端口号是10086**

> 

> 操作到这里,就可以了,服务以及成功在Ereka中注册了,这时候将三个服务跑起来

> 

> 用浏览器进入localhost:10086



![在这里插入图片描述](https://img-blog.csdnimg.cn/553357a69f49419bbc41ecb44ee80911.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbW3lpKnlpKnlhplidWc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)



可以看到注册的服务和其对应的接口地址



> 小知识:

> 

> 如果想多开同一个服务,可以右键该服务,选择复制配置

> 

> ![在这里插入图片描述](https://img-blog.csdnimg.cn/e3a3c0b6c8b243d2a974c3b285e1f153.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbW3lpKnlpKnlhplidWc=,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)



> 然后更换里面的名称和端口号

> 

> ![在这里插入图片描述](https://img-blog.csdnimg.cn/abaec0e46f574c628dac3970794d4b4c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbW3lpKnlpKnlhplidWc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)




# 写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

![蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌](https://img-blog.csdnimg.cn/img_convert/52f731fc4f308f4213109315a0600e58.webp?x-oss-process=image/format,png)

Mybatis面试专题

![蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌](https://img-blog.csdnimg.cn/img_convert/79f2b202076ef2d5009a14b536d10412.webp?x-oss-process=image/format,png)

MySQL面试专题

![蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌](https://img-blog.csdnimg.cn/img_convert/c55e88867e42c380cc2c6e3f65bb4689.webp?x-oss-process=image/format,png)

并发编程面试专题

s-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbW3lpKnlpKnlhplidWc=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)




# 写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

[外链图片转存中...(img-sco9XZGc-1714699738518)]

Mybatis面试专题

[外链图片转存中...(img-zYu2UGVK-1714699738518)]

MySQL面试专题

[外链图片转存中...(img-Ibn0Q8nv-1714699738519)]

并发编程面试专题

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值