springcloud(服务注册中心,非重点组件)

Eureka服务注册与发现

Eureka与dubbo架构图的对比

在这里插入图片描述

Eureka服务的安装
  • 单机

    添加依赖

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

添加配置

eureka:
  instance:
    hostname: localhost #eureka服务端实例名称
  client:
    register-with-eureka: false #表示不向注册中心注册自己
    fetch-registry: false #false表示自己就是注册中心,我的职责就是维护服务实例,并不区检索服务
    service-url:
      defaultZone: http://localhost:7001/eureka/

在启动类添加@EnableEurekaServer注解,这样相当于启动了一个服务的管理和注册中心。

接下来注册服务端

依赖

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  </dependency>
eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka
 //启动类添加注解
  @EnableEurekaClient

可以在管理中心(我们上一步搭建的)看到,一个服务上线了名称就是server.application.name。
在这里插入图片描述
接下来注册消端,引入相同的依赖,操作步骤和注册服务端相同。

  • 集群

高可用,服务集群实现负载均衡

集群原理:两个服务管理中心:相互注册,相互守望

注册端配置换成集群的配置

  defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka  #集群版

消费断负载均衡

1 首先地址改为服务名称

public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";

2.给予resttemplate负载均衡的能力

@Configuration
public class ApplicationContext {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

访问服务可见它的地址在不停的变动,实现了负载均衡。
在这里插入图片描述
微服务信息完善:
配置之前
在这里插入图片描述

instance:
    instance-id: payment8001
    prefer-ip-address: true

配置主机名和显示ip
依赖:

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

配置:

 instance:
    instance-id: payment8001
    prefer-ip-address: true #显示ip

配置后:
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-47C6DjfI-1653836173263)(C:\Users\liyong\AppData\Roaming\Typora\typora-user-images\image-20220528153737330.png)]
鼠标移上去会显示ip地址

服务发现(获取服务的详细信息)

暴露自己的服务信息, 可以写一个接口来暴露自己的服务信息,相当于一个说明文档。
主启动类添加注解:@EnableDiscoveryClient

    @Resource
    private EurekaDiscoveryClient discoveryClient;
    @GetMapping("/discovery")
    public void discovery() {
        List<String> services = discoveryClient.getServices();
        for (String element : services) {
            System.out.println("element:\t" + element);
        }
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance instance : instances) {
            System.out.println(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());
        }
    }
}

eureka自我保护机制

防止误删除(比如网络故障),某个服务不可用不会立即注销该服务。
在这里插入图片描述
禁用自我保护机制配置如下:

server: 
    eureka.instance.lease-expiration-duration-in-seconds=90 #上一次心跳等待时间,单位秒
    eureka.instance.lease-renewal-interval-in-seconds=30 #每过多少次发送心跳

zookeeper代替eureka

依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>

配置

spring:
  application:
    name: cloud-provider-payment
  cloud:
    zookeeper:
      connect-string: 192.168.1.25:2181

启动zookeeper,可以看到服务已经注册成功
在这里插入图片描述

注意:zookeepr的节点是临时性的,所以如果没收到心跳等待一定时间会被注销。
接下来是消费端的注册,步骤和服务端一样(不再重复)

消费端的调用

@RestController
public class OrderController {


    private static final String INVOKE_URL = "http://cloud-provider-payment";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/payment/zk")
    public String get() {
        String result = restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);
        return result;
    }
}

Consul

它本质上和前面两种注册中心一样只是依赖和配置不一样

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-consul-discovery</artifactId>
 </dependency>
spring:
  application:
    name: consul-provider-payment
  cloud:
    consul:
      host: 192.168.28.130
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        heartbeat:
          enabled: true

以上部分图片和代码来源于尚硅谷视频教学

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值