Eureka

1 篇文章 0 订阅

Eureka已停更!!!
Eureka是实现服务注册与发现的组件,围绕它有两个重要的角色:
Eureka Server(服务注册中心或Eurake服务端)和Eureka Client(Eurake客户端),其中Eureka Client又包含Provider Service(服务提供方),Consumer Service(服务消费方)。结构如下图如下如:
在这里插入图片描述
在实现负载均衡时,通过将Eureka Client中的服务(服务方/消费方)注册到Eureka Server,就可以用“服务方/消费方”的实例名代替IP,防止服务所在节点的IP变化之后,其它服务无法调用的问题。

Eureka使用:

准备工作:微服务架构进行服务间的调用,而在这个过程中,使用到了一个工具,叫做 RestTemplate(RestTemplate 是由 Spring 提供的一个 HTTP 请求工具),需要在客户端的消费方创建配置类的包和配置类,并将restTemplate对象注入到消费方的controller层中

package com.atguigu.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    @Bean
//    @LoadBalanced(负载均衡)
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

并将restTemplate对象注入到消费方的controller层中

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.entities.CommonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
@RequestMapping("consumer/payment")
public class OrderController {
    public static final String url = "http://localhost:8002/payment/";
//    public static final String url = "http://CLOUD-PAYMENT-SERVICE/";

    @Resource
    private RestTemplate restTemplate;

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

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

正式使用Eurake

步骤一:添加Eurake依赖:
Eurake依赖有客户端依赖和服务端依赖,二者不同
分别在客户端服务端添加依赖
客户端:(再次强调:客户端包括服务提供发和服务消费方)

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>3.0.2</version>
        </dependency>

服务端:

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>3.0.2</version>
        </dependency>

步骤二:修改yml文件
修改服务端application.yml配置文件

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称,分布式集群需要在本地配置了实例名-ID映射
  client:
    #表示不向注册中心注册自己
    register-with-eureka: false
    #表示自己就是服务中心,我们的职责是维护服务实例,并不需要区检索服务
    fetch-registry: false
    service-url:
      #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/  #

修改客户端“消费方”application.yml配置文件

server:
  port: 80
spring:
  application:
    name: cloud-order-service #服务名

eureka:
  client:
    register-with-eureka: true #是否向注册中心注册自己
    fetchRegistry: true #是否从注册中心抓取已有的注册信息 默认true,集群必须设置为true
    service-url:
      #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://localhost:7001/eureka #单机版
#      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka #集群版

修改客户端“提供方”application.yml配置文件

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/db2021?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    #    useSSL=false 安全连接
    #    useUnicode=true 允许用户自己设定编码
    #    characterEncoding=utf-8 设置数据库编码为UTF-8
    #    serverTimezone=GMT%2B8 设置时区(mysql8)
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapperLocations: classpath:mapper/*.xml
  typeAliasesPackage: com.atguigu.springcloud.entities
#  configuration:          #配置日志(打印sql语句) #MP中SQL不可见 需要通过日志查看
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

eureka:
  client:
    register-with-eureka: true #是否向注册中心注册自己
    fetchRegistry: true #是否从注册中心抓取已有的注册信息 默认true,集群必须设置为true
    service-url:
      #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://localhost:7001/eureka
#      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka #集群版

步骤三:分别在Eurake客户端和服务端的启动类上添加Eurake注解
注意:Eureka的bug,即使不加注解也没事!!!
客户端:@EnableEurekaClient(客户端包括服务提供方和消费方,下面的为提供方)

package com.atguigu.springcloud;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;


@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.atguigu.springcloud.dao")
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class);
    }
}

服务端:@EnableEurekaServer

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class);
    }
}

在不搭建集群的情况下,到此结束

标题搭建集群(修改上面的注释)

并在本地找到:C:\Windows\System32\drivers\etc\hosts
在这里插入图片描述
注意:服务端集群搭建是服务端之间相互注册

优化:如果想在Eurake面板上看到端口号和服务名
需要在Eurake客户端(提供方、消费方)添加如下配置
在这里插入图片描述

eureka:
  instance:
    instance-id: payment8002 #服务名
    prefer-ip-address: true #访问路径可以显示IP

Eureka自我保护机制:


注册到Eureka中的服务,在某个时刻不可用了,Eureka不会立刻清理,依旧会对该服务信息进行保存。
在这里插入图片描述
在这里插入图片描述

关闭自我保护:

找到Eureka服务端所对应的配置文件:
在这里插入图片描述
默认为true(开启),设置为false就关闭了自我保护。
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值