单节点注册中心搭建 (Eureka)

因为每个IDE新建项目过程可能不同,所以在官网上建项目:https://start.spring.io/

至少需要建三个项目,才可以完成这个流程:

  1. eureka 注册中心项目 (需要引入eureka-server组件) -- 注册中心的服务端
  2. product-service 服务提供者项目 (需要引入eureka-client组件) -- 注册中心的客户端
  3. consumer 消费者项目 (需要引入eureka-client组件) -- 注册中心的客户端

第一步:新建eureka注册中心项目(即服务端的搭建)

1.新建项目

下载解压,用IDE打开就是一个项目了。

2.在项目目录下新建 application.yml文件,填写配置内容

server:
    port: 8201 # 注册中心的端口号
eureka: 
  instance:
    hostname: eureka-8201 # 本实例的访问主机,即:Status列中链接的hostname部分。 如果 prefer-ip-address 项设置为true,则这里将会使用对应服务的IP
  client:
    register-with-eureka: false # 是否向注册中心注册自己,这里只有一台就不注册了
    fetch-registry: false # 要不要去注册中心获取其他服务的地址,这里只有一台就不需要了
    service-url: 
      defaultZone: http://localhost:${server.port}/eureka # 注册中心提供服务的地址,服务器开放的通信地址,其它服务可以通过这个地址注册过来(就是发注册的请求给注册中心)
      # http://域名:端口  域名是要给别的服务能访问到的(测试的时候在本机所以用localhost了,也可以用127.0.0.1),端口就是本注册中心的端口${server.port}表示用的本注册中心的端口,即8201
  server: 
    enable-self-preservation: false # 是否允许开启自我保护模式
    eviction-interval-timer-in-ms: 5000 # Eureka服务器清理无效节点的时间间隔,单位:毫秒

3.给启动类添加注释 @EnableEurekaServer 说明需要开启注册中心功能

package com.example;

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

@SpringBootApplication
@EnableEurekaServer
public class Eureka8201Application {

	public static void main(String[] args) {
		SpringApplication.run(Eureka8201Application.class, args);
	}

}

这样,服务端就建好了,可以启动一下:访问 http://localhost:8201/

能访问表示启动成功。

第二步,创建服务提供者项目:

1.新建项目

下载并打开,这个项目里要提供一个可以访问的服务接口。

2.新建配置文件:application.yml

spring:
  application:
    name: product-service # 服务提供项目的实例名称

server:
  port: 8202 # 服务提供项目的端口号

eureka:
  client:
    serviceUrl: # 这一项配置名称 与 service-url 效果相同
      defaultZone: http://localhost:8201/eureka/ # 注册中心的服务地址

3.启动类添加注解:@EnableEurekaClient 表名是注册中心的一个客户端

package com.example;

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

@SpringBootApplication
@EnableEurekaClient
public class ProductService8202Application {

	public static void main(String[] args) {
		SpringApplication.run(ProductService8202Application.class, args);
	}

}

4.创建一个控制器类(Controller),来提供服务:

package com.example.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

    // 注入本项目的端口号
    @Value("${server.port}")
    private String port;

    // 提供一个接口用于提供服务
    @GetMapping("/index")
    public String index() {
        return "index : " + port;
    }
}

把项目运行起来,刷新下注册中心的页面,会看到服务提供者已经注册到注册中心了:

服务提供者已经就绪,等待消费者来访问。

第三步,新建服务消费者项目:

1.新建项目,除了项目名称外,其它的与服务提供者完全相同:

2.新建文件  application.yml :

spring:
  application:
    name: consume # 消费者的实例名称
    
server:
  port: 8203 # 消费者实例的端口号

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8201/eureka/  # 注册中心的服务地址,用于将消费者注册进去

3.主启动类开启客户端:@EnableEurekaClient

4.新建一个ApplicationConfig.java 来注入RestTemplate,我们用它来调接口:

注意下要加 @LoadBalanced 这个注解,否则会报异常:java.net.UnknownHostException

package com.example.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 ApplicationConfig {
    
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

5.新建一个控制器,编写方法:

package com.example.controller;

import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class IndexController {
    
    @Resource
    RestTemplate restTemplate;
    
    @GetMapping("/a")
    public String index(){
        
        // 直接使用注册中心,服务提供项目的项目名称去请求就可以了
        String url = "http://PRODUCT-SERVICE/index";
        
        String result = restTemplate.getForObject(url, String.class);
        
        return result;
    }
}

启动消费者。

刷新下注册中心:

访问下消费者

为了验证下可以起到注册中心的作用,再开一个服务提供者,把服务提供者的配置商品改一下,再启动起来一个:

刷新下现在的注册中心,可以看到又新出现了一个服务提供者,端口是:8222

再刷新消费者,可以看到端口号在交替出现:

 

完毕。

搭建注册中心集群,参考:https://blog.csdn.net/nece001/article/details/106828313

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值