Spring Cloud从入门到放弃(五):Eureka服务提供者和消费者

前言

Spring Cloud系列文章大多是有联系的,最好是从一开始看起

Spring Cloud系列: 点击查看Spring Cloud系列文章


Eureka 服务提供者

创建了注册中心之后,我们就可以创建提供服务的客户端工程了,然后将其注册到注册中心。如果不知道怎么创建注册中心的,请看Spring Cloud系列。

1、首先创建一个Spring Boot项目,添加以下依赖

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

    <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>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


2、在启动类添加@EnableDiscoveryClient注解,在Hoxton版本已经可以不用加这个注解

3、在配置文件进行eureka客户端的配置

spring.application.name= eureka-client-service

server.port=8888

#指定服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:2002/eureka/

# 采用IP注册
eureka.instance.preferIpAddress=true

提示:6666端口号不可用,不要用

启动服务,我们可以看到控制台中有输出注册信息的日志:

2020-07-16 15:29:59.960  INFO 44920 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_EUREKA-CLIENT-SERVICE/eureka-client-service:192.168.137.1:8888- registration status: 204

启动该工程后,再次访问eureka页面,就可以看到我们的client客户端实例了。

在这里插入图片描述
至此,一个 Eureka 服务提供者就创建完成了,我们就可以在这个项目上创建接口,让消费者进行消费了

下面是我在服务提供者工程创建的hello接口

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

Eureka 服务消费者

当我们在一个客户端上提供了一个供其他的客户端使用的服务后,其他客户端如何消费呢。下面我们就来编写一个服务的消费者,来消费一个客户端提供的服务。

首先,创建一个spring boot项目,和服务提供方,添加相应的依赖和配置(将项目名和端口号改一下就行了),将项目注册到和服务提供方相同的注册中心上。

server.port=8890

spring.application.name= eureka-consumer-service

#指定服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:2002/eureka/```

注:最重要的就是将消费者工程和提供者工程都注册到同一个注册中心

两个客户端之间的通信访问,我们使用RestTemplate ,RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。

//先配置一个RestTemplate来使用

@Configuration
public class RestConfiguration {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

调用服务,我们只需要通过RestTemplate 进行调用即可。调用服务,我们可以使用两种方式,一种是通过url直接调用,一种是通过eureka调用

下面我们就在消费者客户端调用上面服务提供方的hello接口

1、url直接调用

如下:

    @Test
    void contextLoads() {
        String result = restTemplate.getForObject("http://localhost:8888/hello", String.class);
        System.out.println(result);
    }

在消费者客户端调用上面测试方法,成功输出hello


2、通过eureka调用服务
在同一个注册中心中调用服务,我们不需要知道服务提供者的url地址具体是多少,只需要知道服务提供者注册到eureka的名称即可。注册到eureka的名称一般就是spring.application.name

使用eureka调用服务,我们需要在RestTemplate的bean上添加 @LoadBalanced 注解(不添加不能通过服务名调用),这个注解会自动构造 LoadBalancerClient 接口的实现类并注册到 Spring 容器中,然后负载均衡地调用我们的服务实例

所以,我们要修改一下RestTemplate

   //配置RestTemplate 
   @Bean
   @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

//服务调用

@Test
void contextLoads() {
    String result = restTemplate.getForObject("http://EUREKA-CLIENT-SERVICE/hello", String.class);
    System.out.println(result);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值