微服务01-基本介绍+注册中心EureKa

基本介绍

服务集群:一个请求由多个服务完成,服务接口暴露,以便于相互调用;

注册中心:每个服务的状态,需要进行维护,我们可以在注册中心进行监控维护服务;

配置中心:这些服务的配置我们都放在配置中心中配置,方便拉取配置信息,减少代码冗余;



微服务优点

耦合度高,所有代码量放在一个里面,打包编译时间会很长,动一个模块中的代码,其他的可能会受影响;


分布式架构:

对功能进行拆分,每个业务作为独立的项目作为独立项目开发,称为一个服务;方便升级,修改;


认识微服务
每个功能对应一种服务,避免业务重复开发,耦合度低,每个服务可以做一个对应的数据库,防止数据污染;

总结:

SpringCloudAlibaba兼容前面两种:


企业微服务遇到场景:


SpringCloud=SpringBoot+新的组件,因为基于springboot可以将这些组件自动装配;

服务拆分及远程调用

例子:
让订单模块调用用户模块(暴露接口),从而得到用户信息(数据库每个模块有自己专属的)


远程调用分析:订单模块只需要能够请求到用户模块即可


使用RestTemplate来完成远程调用获取用户信息;

1.现在主启动类注入一个RestTemplate组件

java 复制代码
package cn.itcast.order;
 
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
 
@MapperScan("cn.itcast.order.mapper")
@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();
    }
}

然后再订单的业务功能中调用RestTemplate中的方法对远程接口进行调用以获取数据:

getForObject(请求路径,数据类型)

java 复制代码
package cn.itcast.order.service;
 
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
 
@Service
public class OrderService {
 
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;
 
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
 
        //2.利用RestTemplate发送http请求,查询用户
        String url="http://localhost:8081/user/"+order.getUserId();
 
        //2.1对url进行请求得到json数据,并且转化为User类型
        User user = restTemplate.getForObject(url, User.class);
        order.setUser(user);
 
        // 4.返回
        return order;
    }
}

消费者和提供者

服务与服务之间的关系需要相对来看,一个服务即可以是消费者也可以是提供者;

服务提供者:将接口暴露给其他服务;

服务消费者:调用暴露的接口;

EureKa注册中心

针对消费者如何获取提供者的地址信息;

对于消费者如何在多个提供者中进行选择;

消费者如何知道提供者健康状态;

这里,EureKa全部帮你解决了

所有的服务,只要在EureKa的客户端,都会被注册到EureKa的注册中心(就跟暗网一样),每个人都能又当商家又当卖家,比如这里的消费者->会对其他服务进行请求;

直接根据具体的请求向EureKa拉取提供者信息;

而多个提供者的筛选------>消费者会利用负载均衡算法选择一个微服务进行远程调用;

而其他服务的请求状态(是否宕机等等),每30s会对注册中心反馈一次心跳;

EureKa实战:搭建EureKaServer

1.先专门建一个 EureKa服务端,然后引入EureKa-server依赖

java 复制代码
   <!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

2.对EureKa启动类中+@EnableEureKaServer注解,声明是一个EureKa服务启动

java 复制代码
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

3.在yaml中配置EureKa服务端地址->(另外要把自己也注册到EureKa客户端中,因为如果有多个EureKa,也就是集群,会出现相互调用的情况)

yaml 复制代码
server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url: # eureka的地址信息,因为eureka也要注册自己,比如eureka集群之间需要通信
      defaultZone: http://127.0.0.1:10086/eureka

服务名字+信息地址 (服务注册地址)

服务注册:(对一个服务设置多个端口进行处理)

好处

有利于分担请求压力

对服务进行引入EureKa的依赖+yaml中配置EureKa的地址------>代表服务注册


.对服务引入EureKa-client依赖,并且在yaml中设置EureKa地址以及服务名称

xml 复制代码
 <!--eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
yaml 复制代码
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: Wuyuhang
    password: 2002514wyh11
    driver-class-name: com.mysql.jdbc.Driver
 
  application:
    name: orderservice # user的服务名称
eureka:
  client:
    service-url: # user的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

我们还可以对一个服务多端口的方式注册到EureKa中:


在其中配置端口信息即可:Dserver:8082

效果:

负载均衡

在orderservice中完成服务拉取:基于服务名称来获取服务列表,然后根据服务列表进行负载均衡 ------>默认是轮流机制;

总结

相关推荐
Casual_Lei1 小时前
ClickHouse 的底层架构和原理
clickhouse·架构
bug菌¹2 小时前
滚雪球学SpringCloud[4.1讲]: Spring Cloud Gateway详解
java·spring cloud·微服务
小筱在线3 小时前
SpringCloud微服务实现服务熔断的实践指南
java·spring cloud·微服务
cooldream20094 小时前
828华为云征文 | 在华为云X实例上部署微服务架构的文物大数据管理平台的实践
微服务·架构·华为云·文物大数据平台
码拉松5 小时前
千万不要错过,优惠券设计与思考初探
后端·面试·架构
小筱在线7 小时前
使用SpringCloud构建可伸缩的微服务架构
spring cloud·微服务·架构
zheeez7 小时前
微服务注册中⼼2
java·微服务·nacos·架构
灰色孤星A7 小时前
分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata
分布式·微服务·架构·seata·分布式事务·tc服务器·微服务集成seata
litGrey8 小时前
Nacos 与 Eureka 的区别
eureka
MinIO官方账号8 小时前
从 HDFS 迁移到 MinIO 企业对象存储
人工智能·分布式·postgresql·架构·开源