Spring Cloud Eureka 搭建服务端和客户端

前言

在Eureka的服务治理体系中,主要分为服务端和客户端

  • 服务端:注册中心
    • 构建高可用的注册中心集群后,每个注册中心也是体系中的客户端,只是注册中心除了作为客户端之外,还为其他客户端提供了服务注册的特殊功能)
  • 客户端:提供接口的微服务应用

Spring Cloud Eureka基于NetFlix Eureka做了二次封装,为Eureka增加了Spring Boot风格的自动化配置。Spring Boot构建的微服务应用只需两步就可以与Eureka服务治理体系整合

  1. 引入依赖
  2. 注解配置

构建注册中心

  1. 引入依赖
<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><!-- 服务端依赖 -->
	</dependency>
</dependencies>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Finchley.SR1</version><!-- spring cloud 版本 -->
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
  1. 注解配置
spring:
  application:
    name: eureka-server
server:
  port: 1111
eureka:
  instance:
    hostname: localhost
  server:
    enable-self-preservation: false #开发环境关闭eureka的自我保护机制,确保注册中心将不可用的实例正确剔除
  client:
    register-with-eureka: false # 单节点下注册中心不需要注册、发现服务
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

以上两步搭建了一个简单的注册中心
Eureka服务端更多地类似一个现成产品,大多数情况下不需要修改它的配置信息
只是开发环境中关闭注册中心的“自我保护功能”,确保注册中心将不可用的实例正确剔除
EurekaServiceConfigBean里有eureka.service的所有属性

搭建服务提供者

  1. 引入依赖
<dependencies>
   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><!-- spring cloud 客户端依赖 -->
    </dependency>	
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version><!-- spring cloud 版本 -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 配置注解
spring:
  application:
    name: hello-service # 服务名

server:
  port: 8080

eureka:
  instance:
    hostname: localhost # 实例主机名,如果不配置,服务名转host:port格式时host为系统生成的ASUS_PC,无法访问
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka/ #,http://localhost:1112/eureka/ # 将服务注册到两个注册中心时用逗号隔开

启动程序控制台打印以下语句,说明注册成功

DiscoveryClient_HELLO-SERVICE/ASUS_PC:hello-service:8080 - registration status: 204
  1. 提供服务
@RestController
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "hello,consumer;";
    }
}

搭建服务消费者

  1. 引入依赖
<dependencies>
   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><!-- spring cloud 客户端依赖 -->
    </dependency>
    
	<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId><!-- 客户端负载均衡 -->
    </dependency>
		
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version><!-- spring cloud 版本 -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 配置注解
spring:
  application:
    name: ribbon-consumer
server:
  port: 8082

eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka/ # 将消费者注册到注册中心,这样消费者才能从注册中心获取到服务清单
  1. 调用服务
@SpringBootApplication
public class RibbonConsumerApplication {

    @Bean
    @LoadBalanced // 标记通过该对象访问服务会执行客户端负载均衡
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
}
@RestController()
public class HelloController {
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return restTemplate.getForObject("http://HELLO-SERVICE/hello", String.class);// 此处写服务名,ribbon会将服务名转为具体的host:port格式
    }
}

启动服务,访问http://localhost:8082/hello 返回“hello,consumer”
【注】

  • 大多数情况下,一个Spring Boot应用既是服务提供者,也是服务消费者EurekaClientConfigBean
  • Eureka客户端配置主要分为以下两方面
    • 服务注册相关,包括注册中心地址、服务获取的间隔时间、可用区域等。EurekaClientConfigBean查看所有属性
    • 服务示例相关,包括服务实例的名称、主机名、端口号、健康检查路径等。EurekaInstanceConfigBean查看所有属性
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值