【SpringCloud微服务架构】一一一一Eureka(注册中心)

前言

虽然说Eureka已经是时代的弃儿,但是它里面的思想依旧是值得我们去学习的。

如有说的不对的地方还请大家多多包涵,我及时整改!🇹🇭

准备条件

  1. 创建一个父工程引入需要的POM依赖
  2. 创建一个消费者,一个生产者
  3. 创建一个服务的注册中心,简称服务的发现中心

数据库sql

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for payment
-- ----------------------------
DROP TABLE IF EXISTS `payment`;
CREATE TABLE `payment`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `serial` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '支付编号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

一、创建工程

1、父工程中的依赖

这里只做一些版本的控制,具体可以去看gitee上面的源代码,父pom文件中的依赖。

<properties>
    <spring-boot.version>2.3.1.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR5</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.version>3.8.1</maven.compiler.version>
    <spring-boot-admin.version>2.2.3</spring-boot-admin.version>
    <hutool.version>5.3.7</hutool.version>
    <knife4j.version>2.0.3</knife4j.version>
    <jasypt.version>2.1.1</jasypt.version>
    <ttl.version>2.11.4</ttl.version>
    <xxl.job.version>2.2.0</xxl.job.version>
    <project.version>3.9.0</project.version>
</properties>
2、创建一个Eureka服务

在父项目中创建一个新的maven工程,然后将其转换为一个springboot项目

如何转换:在二级包名下面创建一个SpringApplicationxxx下面创建一个main方法,然后在当前类上面加上注解@SpringBootApplication…

/**
 * description: EurekaMain7001
 * date: 2021/5/30 11:53
 * author: XiaoCoder
 * version: 1.0
 */
@SpringBootApplication
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class, args);
    }
}

引入依赖文件

💅这里引入的依赖是spring-cloud-starter-netflix-eureka-server,这个是服务注册中心的依赖。

下面会说到注册者的依赖是什么。

<!--引入commons-->
<dependency>
    <groupId>cn.xiao</groupId>
    <artifactId>cloud-api-common</artifactId>
    <version>${project.version}</version>
</dependency>
<!--引入eureka的服务注册中心-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

配置yml文件信息

这里有朋友就会问了 hostname是什么东西?

hostname:带表的是你本地的 hosts中的一个IP地址,让其可以代替不同的机器而已。

不同的机器:稍后再说(这是一个注册中心集群的问题,此处不深究💃 )

image-20210530191634421

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false # false 表示不向注册中心注册自己
    fetch-registry: false #false 表示我自己就是服务注册中心,我的职责就是维护服务实例,并不去检索服务
    service-url:
      # 设置 eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka/ 

配置Eureka服务端 SpringBoot启动类

在当前的Eureka上面加上一个@EnableEurekaServer,这个注解代表当前微服务是一个Eureka服务端

/**
 * description: EurekaMain7001
 * date: 2021/5/30 11:53
 * author: XiaoCoder
 * version: 1.0
 */
@SpringBootApplication
@EnableEurekaServer //代表服务注册中心
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class, args);
    }
}

至此Eureka的服务端(注册中心)就完全配置好了

3、创建一个Provider服务提供者

说明:

我这里已经将公共数据抽取成了一个公共的模块cloud-api-common,具体可以查看一个gitee上面的代码

公共包结构
image-20210530193510793

CommonResult:这个就相当于将后端数据进行整合返回给前段,具体直接看我下面贴的代码 ⬇️

/**
 * description: Payment
 * date: 2021/5/29 12:20
 * author: XiaoCoder
 * version: 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T>{
    
    private Integer code;
    private String message;
    private  T data;
    
    public CommonResult(Integer code,String message){
        this(code,message,null);
    }
}

Payment:相当于是一个订单记录实体类

/**
 * description: Payment
 * date: 2021/5/29 12:20
 * author: XiaoCoder
 * version: 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {

    private Long id;
    private String serial;
}

Provider服务提供者配置

pom文件可以直接查看cloud-provider-payment8001

1、yaml配置

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      url: jdbc:mysql://localhost:3306/db2019?userUnicode=true?characterEncoding=utf-8&useSSL=false
      username: root
      password: 123456

eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7003.com:7003/eureka #集群版
    #是否从EurekaServer中抓取自己的注册信息,默认为true。单节点为所谓,集群必须设置为true
    fetch-registry: true
    # 是否将自己注册进eureka,默认为true
    register-with-eureka: true
  instance:
    instance-id: payment8001
    prefer-ip-address: true

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: cn.xiao.springcloud.entity

2、启动类的配置

@SpringBootApplication
@MapperScan("cn.xiao.dao")
@EnableEurekaClient //Eureka客户端
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

3、Controller、Service、Dao此处省略

。。。。

4、创建一个Consume服务消费者

和上述的Provider步骤基本一样,大家可以参考

注意:唯一不同的是,消费者服务是需要调用生产者的服务的

1、yaml配置

yaml配置无外乎就是配置:

  1. 端口号 server-port: 80
  2. 服务名称spring-application-name: cloud-order-80
  3. 配置Eurekaeureka-client-service-url-defaultZone: http://eureka7001.com:7001/eureka
server:
  port: 80
spring:
  application:
    name: cloud-order-80

eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7003.com:7003/eureka #集群版
    #是否从EurekaServer中抓取自己的注册信息,默认为true。单节点为所谓,集群必须设置为true
    fetch-registry: true
    # 是否将自己注册进eureka,默认为true
    register-with-eureka: true

2、启动类

/**
 * description: OrderMain80
 * date: 2021/5/29 15:27
 * author: XiaoCoder
 * version: 1.0
 */
@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class, args);
    }
}

3、通过RestTemplate进行调用生产者服务

/**
 * description: ApplicationContextConfig
 * date: 2021/5/29 15:33
 * author: XiaoCoder
 * version: 1.0
 */
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced //使用@LoadBalanced注解赋予了RestTemplate负载均衡的能力,你直接访问CLOUD-PAYMENT-SERVICE 这个服务号,但是下面根本不知道你访问的哪个端口号。
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

4、Consume的OrderController

/**
 * description: OrderController
 * date: 2021/5/29 15:32
 * author: XiaoCoder
 * version: 1.0
 */
@RestController
@Slf4j
public class OrderController {

    // 单机端口
    //private static final String PAYMENT_URL = "http://localhost:8001";
    private static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";

    @Resource
    private RestTemplate restTemplate;

    @PostMapping("/consumer/payment/create")
    public CommonResult<Payment> create(@RequestBody  Payment payment){
        return  restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> get(@PathVariable("id")Long id){
        return  restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    }
}

二、开启服务进行查看

开启服务顺序

EurekaMain7001PaymentMain8001OrderMain80

1、查看注册中心

访问http://localhost:7001/ 进行服务注册中心查看

image-20210530200159279

发送get请求

http://localhost/consumer/payment/get/1

获取到数据

image-20210530200424530

image-20210530200455967

源码

链接: https://gitee.com/wyxhunk/spring-cloud-learn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值