从零开始学分布式一-eureka

本项目使用idea创建的maven项目,然后改成的springboot
首先创建父pom:

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.3.3.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
</dependencyManagement>

单机

eureka-pom.xml:

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

eureka-application.yml

server:
  port: 7001
eureka:
  instance:
    hostname: cloud-eureka-server
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:7001/eureka

启动类

@EnableEurekaServer

集群

相互注册相互守望

cloud-eureka-server7001

server:
  port: 7001
eureka:
  instance:
    hostname: cloud-eureka-server
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka

cloud-eureka-server7002

server:
  port: 7001
eureka:
  instance:
    hostname: cloud-eureka-server
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka

pom和单机版是一样的

payment-server服务注册

payment-server-pom.xml

<dependencies>
    <dependency>
        <groupId>com.zckj</groupId>
        <artifactId>cloud-commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

yml

server:
  port: 8002
spring:
  application:
    name: cloud-payment-server
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002
  instance:
    # 注册中心中展示的实例名称
    instance-id: payment8001
    # 访问路径可以显示ip
    prefer-ip-address: true

启动类

@EnableEurekaClient

order-server服务调用

pom文件:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.zckj</groupId>
        <artifactId>cloud-commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

yml文件

server:
  port: 80
spring:
  application:
    name: cloud-order-server
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

启动类

@EnableEurekaClient

// bean--@LoadBalanced注解不能少尽行负载均衡的
@Configuration
public class SpringContextBeanConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

eureka显示服务ip && 实例名称

payment-yml:(原有基础上添加配置)

eureka:
  instance:
    # 注册中心中展示的实例名称
    instance-id: payment8001
    # 访问路径可以显示ip
    prefer-ip-address: true

必须有spring-boot-starter-actuator依赖

服务发现Discovery

启动类添加注解 @EnableDiscoveryClient

注入DiscoveryClient对象我用的是@Resource

使用:

@Resource
private DiscoveryClient discoveryClient;
@GetMapping("/discover")
public Object discover() {
    List<String> services = discoveryClient.getServices();
    System.out.println("============services===============");
    services.forEach(System.out::println);
    List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-server");
    System.out.println("============instances==============");
    instances.forEach(one -> {
        String host = one.getHost();
        int port = one.getPort();
        URI uri = one.getUri();
        String path = uri.getPath();
        System.out.println("host:" + host + " port:" + port + " uri:" + uri + " path:" + path);
    });
    return this.discoveryClient;
}

eureka自我保护机制理论知识

禁止eureka自我保护机制配置

eureka-yml

eureka:
  server:
    # 关闭自我保护机制,保证服务不可用时,服务被及时剔除
    enable-self-preservation: false
    # 多长时间未收到消息被剔除默认(60000)
    eviction-interval-timer-in-ms: 2000

payment-yml

eureka:
    instance:
        # eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认30秒)
        lease-renewal-interval-in-seconds: 1
        # eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认90秒),超时将剔除
        lease-expiration-duration-in-seconds: 2

项目地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值