1. 注册中心:

=>pom.xml

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

由于是注册中心,所以只需要【spring-cloud-starter-netflix-eureka-server】就够了,不需要【spring-cloud-starter-netflix-eureka-client】

=>application.properties

server.port=9001

eureka.instance.hostname=eureka-9001

# eureka.client.register-with-eureka = false 表示不向注册中心注册自己,因为自己就是注册中心
eureka.client.register-with-eureka=false

# eureka.client.fetch-register = false 表示自己为注册中心
eureka.client.fetch-registry=false

说明就都在注释里面了。

=>启动类

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

需要注解 @EnableEurekaServer 开启 Eureka-Server 

=>简单测试一下

>>http://localhost:9001/

springboot注册中心重启后注册的服务需要重启么 springboot注册中心有哪些_eureka

出现上面的界面就表示成功了。

备注:界面丑丑的,回来看看能不能自定义界面的。

2. 生产者:

=>pom.xml

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

生产者和消费者的服务都属于客户端,所以需要添加【spring-cloud-starter-netflix-eureka-client】的依赖

=>application.properties

server.port=8001

# 服务名称(生产者)
spring.application.name=eureka-provider-service

# 服务描述信息
eureka.instance.instance-id=eureka-provider-service-instance
eureka.client.service-url.defaultZone=http://localhost:9001/eureka

服务名称与服务描述信息不说明了,

最后的是将生产者服务注册到注册中心的地址【http://localhost:9001/】+【eureka】

备注:

  • 这里有一个注意点,在做成服务名称的时候,Eureka是不识别下划线的,因此这里原本使用下划线的地方都换成【-】了。
  • 这里配置的【eureka.instance.instance-id=eureka-provider-service-instance】就是SpringEureka界面服务的Status列的名称。

=>启动类

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

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class EurekaProvider01Application {

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

}

客户端要添加注解 @EnableEurekaClient  或者  @EnableDiscoveryClient(似乎只需要添加一个就行了,这里添加了2个。。。)

备注:这里@EnableEurekaClient确实只需要加这一个就行了,因为两者实现的功能基本相同,同时@EnableEurekaClient内部实现了@EnableDiscoveryClient,

  • 所以说如果使用Eureka作为注册中心的话,推荐使用@EnableEurekaClient
  • 如果使用别的注册中心的话(如Nacos),那么就可以使用@EnableDiscoveryClient

=>Controller

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController01 {

    @RequestMapping("/echo/{str}")
    public String echo(@PathVariable String str){
        return "Hello" + str;
    }
}

简简单单的Controller

=>简单测试一下:

>>http://127.0.0.1:8001/echo/12:测试生产者正常启动

>>http://127.0.0.1:9001/:生产者的服务在注册中心正常注册

springboot注册中心重启后注册的服务需要重启么 springboot注册中心有哪些_spring_02

备注:红字并不时报错,是因为Eureka-Server长时间没有心跳而挂起(差不多是这个意思),具体原因需要参考Eureka的设计原理。

2-1. 生产者 - info信息查看

查看SpringEureka的页面,如果想要查看服务的自定义的【info】信息,需要如下配置:

=>pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>${spring.version}</version>
        </dependency>

=>application.properties

server.port=8001

# 服务名称(生产者)
spring.application.name=eureka-provider-service

# 服务描述信息
eureka.instance.instance-id=eureka-provider-service-instance

eureka.client.service-url.defaultZone=http://eureka-9002:9002/eureka,http://eureka-9001:9001/eureka,http://eureka-9003:9003/eureka

info.user.name=wang

最后一行配置的【info.user.name=wang】就是自定义配置的服务信息

=>简单测试一下:

springboot注册中心重启后注册的服务需要重启么 springboot注册中心有哪些_cloud_03

点击服务的Status的链接(eureka-provider-service-instance):

springboot注册中心重启后注册的服务需要重启么 springboot注册中心有哪些_ide_04

自定义的服务信息会以Json的形式显示出来

3. 消费者

=>pom.xml

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

说明同生产者。

备注:这里可能会有一个小疑问,为什么在消费者使用Ribbon负载均衡了,没有导入依赖呢?原因是【spring-cloud-starter-netflix-eureka-client】之中自带了Ribbon了。

=>application.properties

server.port=7001

spring.application.name=eureka-consumer-service

# 消费者只是向注册中心取服务,并不将本身注册到注册中心中,因此 eureka.client.register-with-eureka = false
eureka.client.register-with-eureka=false
eureka.client.service-url.defaultZone=http://localhost:9001/eureka

说明同生产者。

=>启动类

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

@SpringBootApplication
@EnableEurekaClient
public class EurekaConsumer01Application {

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

}

=>Ribbon负载均衡

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 MyConfiguration {

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

=>Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController01 {

    @Autowired
    private RestTemplate getRestTemplate;

    @RequestMapping("/consumer/echo/{str}")
    public String echo(@PathVariable String str){
        return getRestTemplate.getForObject("http://eureka-provider-service/echo/" + str, String.class);
    }
}

这里利用Ribbon的RestTemplate,采用了生产者的服务名称来获得服务。

=>简单测试一下:

>>http://localhost:7001/consumer/echo/14:能获得生产者提供的对应服务