一、搭建Spring Cloud项目

创建Spring Cloud项目

创建父项目(Maven项目即可),在pom.xml中引入spring cloud依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/>
</parent>
<groupId>com.yun</groupId>
<artifactId>framework-server</artifactId>
<version>1.0.0</version>
<name>framework-server</name>
<description>框架服务</description>
<packaging>pom</packaging>

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>

<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>

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

spring boot 和spring cloud对应的版本

Spring BootSpring Cloud
1.2.xAngel版本
1.3.xBrixton版本
1.4.x stripesCamden版本
1.5.xDalston版本、Edgware版本
2.0.x stripesFinchley版本
2.1.xGreenwich版本

搭建注册中心-eureka

创建Module项目,在pom.xml文件中加入eureka依赖

<parent>
   <groupId>com.yun</groupId>
   <artifactId>framework-server</artifactId>
   <version>1.0.0</version>
   <relativePath/>
</parent>
<groupId>com.yun</groupId>
<artifactId>server-eureka</artifactId>
<version>1.0.0</version>
<name>server-eureka</name>
<description>注册中心</description>

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

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

在启动类加入注解@EnableEurekaServer
application.yml配置

#配置端口
server:
  port: 8081
spring:
  application:
    #配置服务名称
    name: server-eureka

eureka:
  client:
    #是否从Eureka Server获取信息
    fetch-registry: false
    #是否注册到注册中心,默认为true
    register-with-eureka: false
    service-url:
      #设置注册中心地址,默认端口为8761
      defaultZone: http://localhost:${server.port}/eureka

然后!!!将项目跑起来,在浏览器输入:http://localhost:8081/ 就可以进入到注册中心的页面,PS:这是一个单节点的服务注册中心

服务的提供者和消费者

什么是服务的提供者和消费者?

在这里插入图片描述
上图简要描述了Eureka的基本架构,由3个角色组成:
1、Eureka Server: 提供服务注册和发现
2、Service Provider: 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到
3、Service Consumer: 服务消费方,从Eureka获取注册服务列表,从而能够消费服务

怎么实现的呢?

服务的发现和消费其实是两个行为,这两个行为也是由两个不同的对象来完成,分别是EurekaRibbonRibbon是一个基于HTTP和TCP的客户端负载均衡器,当EurekaRibbon一起使用的时候,Ribbon会从Eu加粗样式reka注册中心中获取服务端列表,然后进行轮询访问以达到负载均衡的作用,服务端这些是否在线这些则由Eureka进行管理。

一、创建服务的提供方

在pom文件中加入以下依赖

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

在启动类中加入注解@EnableDiscoveryClient

/**
 * User服务启动入口
 *
 * @author Aaron
 * @date 2019/12/29 12:32
 */
@EnableDiscoveryClient
@SpringBootApplication
public class UserApplication {

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

}

application.yml配置,主要是配置一下该服务注册到哪里

#配置端口
server:
  port: 8082

#配置服务名称
spring:
  application:
    name: server-user

eureka:
  client:
    service-url:
      #配置注册中心地址
      defaultZone: http://127.0.0.1:8081/eureka
/**
 * 用户
 *
 * @author Aaron
 * @date 2019/12/30 09:36
 */
@RestController
@RequestMapping("/user")
public class UserController {

    /**
     * 自我介绍
     *
     * @author: Aaron
     * @date: 2019/12/30 09:40
     * @param: [name]
     * @description:
     * @return: java.lang.String
     */
    @GetMapping("/self")
    public String selfIntroduction(String name) {
        return "my name is " + name;
    }
}
二、创建服务的消费方

同样的在pom.xml中加入依赖

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

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

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

在启动类加入注解@EnableDiscoveryClient、@EnableFeignClients

/**
 * 组织服务启动
 *
 * @author Aaron
 * @date 2019/12/29 18:54
 */
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class OrgApplication {

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

}

配置文件和上面一样,这里就省略了,然后到了重头戏了,服务之间的互相调用(消费)
创建UuserFeign类,用于统一管理user服务接口

/**
 * @author Aaron
 * @date 2019/12/30 09:42
 */
@FeignClient(name = "server-user", fallback = UserFeignFallback.class)
public interface UserFeign {
    /**
     * 自我介绍
     *
     * @author: Aaron
     * @date: 2019/12/30 09:49
     * @param: name : 姓名
     * @description:
     * @return:
     */
    @RequestMapping(value = "user/self", method = RequestMethod.GET)
    String selfIntroduction(@RequestParam("name") String name);
}

这里@FeignClient中的name指的是哪个服务,所以我们之前给每个服务配的服务名称就派上用场啦,然后定义接口,参数、请求方式、返回需要和调用的接口保持一致。

TestCtroller.java

/**
 * 测试Fegin
 *
 * @author Aaron
 * @date 2019/12/30 09:35
 */
@RestController
@RequestMapping("/org")
public class TestController {

    @Autowired
    private UserFeign userFeign;

    /**
     * @author: Aaron
     * @date: 2019/12/30 09:51
     * @param: [name]
     * @description:
     * @return: java.lang.String
     */
    @GetMapping("/test")
    public String test(@RequestParam("name") String name) {
        return userFeign.selfIntroduction(name);
    }
}

然后就可以跑项目啦,首先要先启动注册中心,然后再启动其他服务。
最后我们使用PostMan或者其他方式来测试Org服务中的org/test这个接口,看下是否能成功调用到User服务的接口。
在这里插入图片描述

各个服务之间的调用其实也是相当于调接口,只不过这边有一个很方便很简单的给我们直接用,那就是Feign,还有一种方式就是RestTemplate。

1.Feign是一个声明式的REST客户端,它的目的就是让REST调用更加简单。
2.Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
3.而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。
4.SpringCloud对Feign进行了封装,使其支持SpringMVC标准注解和HttpMessageConverters。
5.Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

下一章:二、Eureka集群高可用配置

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值