[Alibaba微服务技术入门]_服务的消费_第3讲

这讲内容我们会演示基于nacos的服务消费方去访问服务的提供方,同时还会加入负载均衡的方式去访问

服务提供方

  • 1-nacos-provider9001
  • 2-nacos-provider9002

分别将这两个服务器实例启动,我们查看nacos实例发现会有两个服务实列

 

服务消费方

1、创建 3-nacos-consumer8001,项目的依赖 spring-cloud-starter-alibaba-nacos-discovery

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>alibaba</artifactId>
        <groupId>com.liuyangjava</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.liuyangjava</groupId>
    <artifactId>3-nacos-consumer8001</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

2、创建 application.yml

server:
  port: 8001

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: nacos-consumer

management:
  endpoints:
    web:
      exposure:
        include: '*'

service-url:
  nacos-provider: http://nacos-provider
  • service-url.nacos-provider:通过配置文件,设置服务提供者的地址,等待消费者接口调用
  • spring.application.name:设置消费者的应用程序的名称

3、创建NacosConsumer8001主启动类

package com.liuyangjava;

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumer8001 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumer8001.class, args);
    }
}

 4、创建配置类,主要完成消费方的负载均衡的访问配置

  • @Configuration:从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器
  • @Bean:它是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名
  • @LoadBalanced:在使用 RestTemplate 的时候,如果 RestTemplate 上面有这个注解,那么这个 RestTemplate 调用的远程地址,会走负载均衡器
package com.liuyangjava.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 ApplicationContextConfig {

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

 5、创建 NacosConsumerController,通过此负载均衡方式去调用服务提供者接口

package com.liuyangjava.controller;

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

import javax.annotation.Resource;

@RestController
public class NacosConsumerController {

    @Value("${service-url.nacos-provider}")
    private String serverUrl;

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/nacos/consumer")
    public String getInfo() {
        return restTemplate.getForObject(serverUrl + "/nacos/provider", String.class);
    }

}

 

posted @ 2021-10-15 14:54  子墨老师  阅读(50)  评论(0编辑  收藏  举报