如何搭建Eureka注册中心(备忘录1)

1.搭建注册中心

1.1创建项目

可以是子项目,也可以专门新建一个项目。

1.2pom加入依赖

如下:

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

1.3修改yml配置文件

如下:

# Eureka相关配置
# Eureka 服务
server:
  port: 10010
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数
    register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
    service-url:
      # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

1.4启动类

最后我们只需要在启动类加上一个@EnableEurekaServer注解就可以,随后我们启动类,浏览器搜http://127.0.0.1:10010
在这里插入图片描述
能看到这个就说明搭建成功了!当然,里面还没有存储IP地址

2.服务注册

也就是服务端去注册中心登记一下自己的IP地址,以便消费者去获取。所以首先我们需要一个服务,然后对这个服务进行一些设置以便于与注册中心建立联系。

2.1加入Eureka依赖

跟注册中心的依赖非常相似,一个是server,一个是client。
如下:

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

2.2修改yml配置文件

如下:


eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10010/eureka/

别忘了设置spring:application:name。注册中心就是存这个名字和对应的IP地址的。

接下来我们可以启动服务端,看有没有被存在注册中心。
在这里插入图片描述
Look!成功了,那个ORDER-SERVICE就是设置的spring:appication:name的名字

3.服务发现

服务发现就是指服务A要去访问这个服务B,所以要去注册中心去拿服务B的IP地址。怎么拿呢?具体如下:

3.1依旧加入依赖

你使用Eureka组件肯定要引入相关依赖的,如下:

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

3.2修改yml配置文件

如下:

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10010/eureka/

你想从注册中心查数据首先要知道注册中心的位置。

3.3修改远程调用代码

在没有使用Eureka组件时,我们想访问另一个服务只能通过RestTemplate类调用方法访问

RestTemplate restTemplate=new RestTemlate();
String url="............";
restTemplate.getForObject("目标服务URL地址",返回类类型.class).var;

这样URL地址就是写死的,但是我们不能保证该服务的URL是不变的,一旦改变我们还要一个个修改这些访问其他服务的方法,很不方便,这就是注册中心的作用:它将服务的URL与服务的唯一名称绑定在一起。我们需要其他服务的URL只需将用DisCoveryClient类的方法查询并接收就可以,如何查询,如下:

DisCoveryClient disCoveryClient -new DisCoveryClient();
disCoveryClient.getInstances("目标服务名称").get(0).getUri.toString().var;
//getInstance返回的是列表,我们通过索引拿第一个

再将这个参数传给restTemplate,这样就避免了硬编码。
修改后代码如下:

List<ServiceInstance> instances = discoveryClient.getInstances("product-service");
String s = instances.get(0).getUri().toString();
String url=s+"/product/getProduct?productId="+orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值