springCloud入门

Posted G_whang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springCloud入门相关的知识,希望对你有一定的参考价值。

前面用Eureka实现服务发现;使用Ribbon实现了负载均衡,但是调用方式使用的是这样的
在这里插入图片描述
直接写死的,既不美观也不便于维护,所以springcloud又引入了Feign来解决以上问题。
什么是Feign呢?
Feign是Netflix开发的声明式、模板化的HTTP客户端。可帮助我们更加便捷、优雅地调用HTTP API。在Spring Cloud中,使用Feign非常简单——只需创建接口,并在接口上添加注解即可。
代码如下:
Eureka注册中心和服务提供者 代码不变
feign代码如下
pom文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>test-consumer-user-feign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>test-consumer-user-feign</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 引入Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--增加eurekaclient-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--增加feign 注解-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
    <!-- 引入spring cloud的依赖,不能少,主要用来管理Spring Cloud生态各组件的版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件

server:
  port: 8004
spring:
  ## 指定注册到eureka server上的服务名称
  application:
    name: test-consumer-user-feign
eureka:
  client:
    service-url:
      # 指定eureka server通信地址,注意/eureka/小尾巴不能少
      defaultZone: http://localhost:8761/eureka/
  instance:
    # 是否注册IP到eureka server,如不指定或设为false,那就会注册主机名到eureka server
    prefer-ip-address: true


启动类

package com.example.testconsumeruserfeign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * 加注解 启动类上添加 @EnableFeignClients
 */
@EnableFeignClients
@SpringBootApplication
public class TestConsumerUserFeignApplication {

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

}

feign 调用类

package com.example.testconsumeruserfeign.api;

import com.example.testconsumeruserfeign.pojo.LibraryInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "test-provider-library")
public interface LibraryFeignClient {

    /**
     *  注意 @PathVariable("id") 括号里面的ID不能省略
     * @param id
     * @return
     */
    @GetMapping("/library/{id}")
    LibraryInfo getFindById(@PathVariable("id") Long id);

}

Controller

package com.example.testconsumeruserfeign.controller;


import com.example.testconsumeruserfeign.api.LibraryFeignClient;
import com.example.testconsumeruserfeign.pojo.LibraryInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户控制类
 */
@RestController
@RequestMapping("/user")
public class UserController {

    /**
     * 注入feign
     */
    @Autowired
    private LibraryFeignClient libraryFeignClient;

    @GetMapping("/library/{id}")
    public LibraryInfo findById(@PathVariable Long id){
        return libraryFeignClient.getFindById(id);
    }


}

实体类

package com.example.testconsumeruserfeign.pojo;

import lombok.*;

/**
 * 图书馆信息
 *
 */
@Getter
@Setter
@Builder
@NoArgsConstructor
// 为类提供一个全参的构造方法
@AllArgsConstructor
public class LibraryInfo {


    private Long id;

    /**
     * 图书馆名称
     */
    private String name;

    /**
     * 图书馆地址
     */
    private String address;

    /**
     * 总座位数
     */
    private Integer number;

    /**
     * 可预约数量
     */
    private Integer count;

}

然后依次启动注册中心,服务提供者 ,服务消费者
访问注册中心

http://localhost:8761/

在这里插入图片描述
访问服务消费者

http://localhost:8004/user/library/1

调用成功
在这里插入图片描述

以上是关于springCloud入门的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段

推荐net开发cad入门阅读代码片段

SpringCloud入门[转]

[菜鸟SpringCloud入门]第一章:构建多模块的Maven项目+创建注册中心Eureka子模块

[菜鸟SpringCloud实战入门]第八章:通过消息总线Bus实现配置文件统一刷新(使用Kafka)

Java 微服务之 SpringCloud快速入门day02 Feign