继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

第三篇:Spring Cloud 服务提供与调用

青春有我
关注TA
已关注
手记 1199
粉丝 205
获赞 1008

上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册中心,搭建一个简单的服务端注册服务,客户端去调用服务使用的案例。

案例中有三个角色:服务注册中心、服务提供者、服务消费者,其中服务注册中心就是我们上一篇的eureka单机版启动既可,流程是首先启动注册中心,服务提供者生产服务并注册到服务中心中,消费者从服务中心中获取服务并执行。

1、注册中心


添加Eureka注册中心

1.1、pom.xml文件

添加Eureka的依赖包

 <dependencies>
        <!--添加springCloud的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

1.2、application.yml文件配置

application.yml配置如下:

### 服务名称spring:
  application:
    name: spring-eureka### 指定端口号server:
  port: 8081### eureka配置eureka:
  client:    #表示是否将自己注册到Eureka Server上,默认为true,当前应用为Eureka Server所以无需注册
    registerWithEureka: false
    #表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。
    fetchRegistry: false
    #Eureka Server的访问地址,服务注册和client获取服务注册信息均通过该URL,多个服务注册地址用,隔开
    serviceUrl:
      defaultZone: http://localhost:8081/eureka/

1.3、启动类

在启动类上添加@EnableEurekaServer注解

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

1.4、启动注册中心

启动注册中心,在浏览器输入http://localhost:8081查看注册中心页面是否成功显示

webp

eureka.png

2、生产者(Producer)

我们假设服务提供者有一个hello方法,可以根据传入的参数,提供输出“hello xxx,weclome Spring Cloud!”的服务

2.1、pom文件

 <dependencies>
        <!--添加springCloud的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.1、配置文件

application.yml配置如下:

### spring 名称spring:
  application:
    name: spring-cloud-producer### 端口号server:
  port: 8082### eureka注册中心eureka:
  client:
    service-url:
      defaultZone: http://localhost:8081/eureka/

2.2、启动类

在启动类上面添加@EnableDiscoveryClient注解:

/**
 * 消息生产者
 * @EnableEurekaClient 注解是基于spring-cloud-netflix依赖,只能为eureka作用;
 * @EnableDiscoveryClient 支持多种注册中心,例如consol,zookeeper等
 */@SpringBootApplication@EnableDiscoveryClientpublic class SpringCloudProducerApplication {    public static void main(String[] args) {
        
        SpringApplication.run(SpringCloudProducerApplication.class, args);
    }
}

这里有个注意点,其实在这里还可以使用@EnableEurekaClient这个注解,但是这个注解只限于使用Eureka注册中心的时候,当我们替换了注册中心,这个注解是不能使用的,因此它是存在局限性的。

2.3、生产者(Producer)

ProducerController中我们添加了hello()方法:

@RestController
public class ProceduerController {

    @GetMapping("/hello")
    public String hello(String name){        
        return "hello "+name+" weclome springCloud!";
    }
}### 2.4、启动生产者添加`@EnableDiscoveryClient`注解后,项目就具有了服务注册的功能。启动工程后,就可以在注册中心的页面看到SPRING-CLOUD-PRODUCER服务。

3、服务调用(Consumer)

3.1、pom文件

配置和上面都是相同的

<dependencies>
    <!--添加springCloud的依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency></dependencies><dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Camden.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies></dependencyManagement>

3.2、配置文件

application.yml文件配置:

### spring 名称spring:
  application:
    name: spring-cloud-consumer### 端口号server:
  port: 8083### eureka注册中心eureka:
  client:
    service-url:
      defaultZone: http://localhost:8081/eureka/

3.3、启动类

创建应用主类。初始化RestTemplate,用来真正发起REST请求。@EnableDiscoveryClient注解用来将当前应用加入到服务治理体系中。

@SpringBootApplication@EnableDiscoveryClientpublic class SpringCloudConsumerApplication {    @Bean
    public RestTemplate restTemplate(){        return new RestTemplate();
    }    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConsumerApplication.class, args);
    }
}

3.4、消费者

ConsumerController中,LoadBalancerClient接口的命名中,我们就知道这是一个负载均衡客户端的抽象定义,下面我们就看看如何使用Spring Cloud提供的负载均衡器客户端接口来实现服务的消费。

@RestControllerpublic class ConsumerController {    @Autowired
    private RestTemplate restTemplate;    @Autowired
    private LoadBalancerClient loadBalancerClient;    @GetMapping("sendName")    public String sendName(String name){
       ServiceInstance serviceInstance =  loadBalancerClient.choose("spring-cloud-producer");
       String url = "http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/hello?name="+name;       return restTemplate.getForObject(url,String.class);
    }

}

可以看到这里,我们注入了LoadBalancerClientRestTemplate,并在/sendName接口的实现中,先通过loadBalancerClientchoose函数来负载均衡的选出一个spring-cloud-producer的服务实例,这个服务实例的基本信息存储在ServiceInstance中,然后通过这些对象中的信息拼接出访问/name接口的详细地址,最后再利用RestTemplate对象实现对服务提供者接口的调用。

在完成了上面你的代码编写之后,读者可以将spring-cloud-eureka、spring-cloud-producer、spring-cloud-consumer都启动起来,然后访问http://localhost:8083/sendName?hrabbit ,来跟踪观察spring-cloud-consumer服务是如何消费spring-cloud-producer服务的/name接口的。

如果出现如图所示,则代表搭建成功了!

webp

result.png

代码示例:

这篇博客的实例代码放到Spring-cloud项目中,项目模块名称为spring-cloud-hello



作者:hrabbits
链接:https://www.jianshu.com/p/d922d27d11be


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP