Spring Cloud微服务架构——Eureka服务发现与消费

在第一篇文章里,我们创建了Eureka服务注册中心(商场),文章地址:Spring Cloud微服务架构——Eureka注册中心

在第二篇文章里,我们创建了Eureka服务提供者(海底捞),并且已经注册到注册中心(入驻到了商场),文章地址:Spring Cloud微服务架构——Eureka服务注册

本篇文章,将介绍服务发现并消费。

服务发现与消费

举个例子,周末出门逛商场,来到商场大门口看到门前的广告牌上有海底捞的广告,正好这时候也饿了,随即就去海底捞吃饭了。这个“看到广告牌上有海底捞的广告”的动作就称为服务发现。这个“去海底捞吃饭”的动作就称为服务消费。在这里,顾客扮演了服务消费者的角色,商场扮演了注册中心的角色,海底捞扮演了服务提供者的角色。可以参考下面的图来理解此场景。

创建服务消费者

与之前的文章相同步骤快速构建Spring Boot工程。

  • 创建完毕后,修改pom文件如下:
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.jqcode</groupId>
    <artifactId>eureka-consumer</artifactId>
    <version>0.0.1</version>
    <name>eureka-consumer</name>
    <description>eureka-consumer</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Brixton.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • 启动类添加@EnableDiscoveryClient注解,并构建RestTemplate的Bean实例。
@EnableDiscoveryClient      // 添加应用服务发现的能力
@SpringBootApplication
public class EurekaConsumerApplication {

    @Bean       // 构建RestTemplate Bean实例
    @LoadBalanced   // 开启客户端的负载均衡
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

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

}
  • 创建服务消费者类
@RestController
public class ConsumerController {

    // 服务端列表,此处的FOOD-SERVICE为服务提供者在Eureka注册中心注册的服务名
    private static final String SERVICE_URL = "http://FOOD-SERVICE/eat?customerName=小白";

    @Autowired
    private RestTemplate restTemplate;      // 通过RestTemplate进行RPC远程调用

    @RequestMapping(value = "/consume", method = RequestMethod.GET)
    public String consume() {
        return restTemplate.getForEntity(SERVICE_URL, String.class).getBody();
    }

}

在这里,可以看到服务地址是http://FOOD-SERVICE/eat?customerName=小白,这里是通过服务名进行调用的,因为在服务注册清单中,服务名与对应服务实例元信息是绑定在一起的,我们通过服务名直接调用就行了。

再看启动类,可能有人会对@LoadBalanced注解比较好奇,此注解可以让我们通过服务名调用,如果不加此注解又通过服务名去调用会报找不到服务的错误,这样的话就只能通过ip:port的形式去调用了,这就脱离了服务注册中心的概念,相当于点对点的直接调用,没什么意义,所以大家还是把这个注解加上。

可以参考此篇文章对@LoadBalanced的解释:@LoadBalanced注解

  • 修改application.properties配置文件
#消费者服务启动端口
server.port=9100
#消费者服务名称
spring.application.name=consumer
#Eureka注册中心服务地址
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka

至此,我们就完成了从服务注册清单中发现服务并进行服务消费!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值