SpringCloud 小案例 -- SpringCloud netfilx 使用

目录

SpringCloud 套餐介绍

实操

1.创建注册中心 demo-registy (Eureka-server框架)

2.创建第一个服务提供者 demo-provider

3.创建第二个服务提供者 demo-provider2

4.创建服务消费者 demo-consumer

5. 调用远程服务

5.1 方法一:使用 RestTemplate 工具类调用

5.2 方式二:使用服务消费 Feign 框架


SpringCloud 套餐介绍

  • springcloud 有两个主流的套餐

套餐1:netfilx(这是一家公司的名称,网飞、奈飞):springcloud netfilx 这就是netfilx这家公司提供的一套微服务解决方案,这套解决方案有很多技术,技术1 注册中心 Eurake,技术2负载均衡Ribbon 等等

套餐2:阿里巴巴的 springcloud alibaba

实操

  • 操作流程

    1.新建一个空项目

    2.在这个空项目下,新建4个模块,一个注册中心,两个服务提供者,一个服务消费者

  • 这里使用的是 springcloud netfilx ,springboot 版本 2.3.7

1.创建注册中心 demo-registy (Eureka-server框架)

1.1 导入依赖

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

1.2 配置注册中心 application.properties

# 应用名称
spring.application.name=demo-registry
# 应用服务 WEB 访问端口,官网默认端口8761,随意改
server.port=8761
​
# 是否注册到注册中心,因为此项目本身就是注册中心,所以不用注册到注册中心,所以配置为false,这里默认配置是 ture 的
eureka.client.register-with-eureka=false
​
# 是否允许从注册中心拉取服务,但是此项目本身就是注册中心,所以配置为false
eureka.client.fetch-registry=false
​
# 配置的注册中心的注册地址,本身就是注册中心,下面这段可以不写,因为源码里就有这个默认值
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

1.3 在启动类上加注解 @EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer  //允许当前项目以注册中心的身份启动
public class DemoRegistryApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(DemoRegistryApplication.class, args);
    }
​
}

2.创建第一个服务提供者 demo-provider

2.1 导入依赖

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

2.2 配置注册到服务中心 application.properties

# 应用名称
spring.application.name=demo-provider
# 应用服务 WEB 访问端口
server.port=8081
​
# 因为此项目是服务提供者,需要把服务注册到注册中心,所以配置为true,这里默认是true的
eureka.client.register-with-eureka=true
​
# 允许从注册中心拉去服务,此项目是服务提供者,所以配置true,这里默认是true的
eureka.client.fetch-registry=true
​
# 配置的注册中心的注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

2.3 在启动类上加注解 @EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient  //服务提供者身份启动
public class DemoProviderApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(DemoProviderApplication.class, args);
    }
  
}

2.4 编写一个接口

@RestController
@RequestMapping("/provider")
public class ProviderController {
​
    @RequestMapping("/demo")
    public String demo(){
        return "服务提供者1";
    }
​
}
  • 启动项目,访问 http://localhost:8761 ,可以看到 demo-provider 服务注册到注册中心,说明创建服务者成功

3.创建第二个服务提供者 demo-provider2

3.1 再建一个项目 demo-provider2,服务名还是叫 demo-provider

  • 所有的配置跟 demo-provider 一样,接口名也一样,服务内容改一改,端口号改一改

                        

3.2 配置 application.properties

            

3.3 编写 controller,除了内容不一样,接口名什么的都跟 demo-provider 一样

           

  • 启动 demo-provider2 项目,访问 http://localhost:8761 ,可以看到服务名为 demo-provider 有两个服务

           

4.创建服务消费者 demo-consumer

4.1 导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
​
        <!-- 发现服务提供者需要的包 -->
        <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-eureka-server</artifactId>
        </dependency>

4.2 配置注册到服务中心 application.properties

# 应用名称
spring.application.name=demo-consumer
# 应用服务 WEB 访问端口
server.port=8082
​
# 因为此项目是服务消费者,需要注册到注册中心,配置为 true,这里默认是 true 
eureka.client.register-with-eureka=true
​
# 允许从注册中心拉去信息,此项目是服务消费者,所以配置true,这里默认是 true
eureka.client.fetch-registry=true
​
# 配置的注册中心的注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

4.3在启动类上加注解 @EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient   //服务消费者身份启动
public class DemoConsumerApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(DemoConsumerApplication.class, args);
    }
​
}

4.4编写一个接口,远程调用服务消费者提供的服务

5. 调用远程服务

5.1 方法一:使用 RestTemplate 工具类调用

  • RestTemplate 调用方式默认是支持复制均衡(它支持负载均衡的框架是 Ribbon,默认是加入了Ribbon,Ribbon是实现负载均衡的框架)

Ribbon与Nginx的负载均衡的区别:

  • Nginx主要是做服务器直接的负载均衡,可以做静态资源负载均衡

  • Ribbon是代码级别的负载均衡,这个职责单一

5.1.1 编写 RestTemplateConfig

@Configuration
public class RestTemplateConfig {
​
    @Bean //将当前方法创建的 Bean 交给 spring 管理
    @LoadBalanced //支持负载均衡
    public RestTemplate restTemplate(){
        RestTemplate template = new RestTemplate();
        return template;
    }
​
}

5.1.2 编写 controller

@RestController
@RequestMapping("/consunmer")
public class Demo {
​
    @Autowired
    private RestTemplate template;
​
    @RequestMapping("/getData")
    public String test(){
        //参数1:请求地址
        //参数2:响应返回值
        //参数3:请求参数
        // 服务提供者那边接口没有参数,所有这里也不用写
        String object = template.getForObject("http://demo-provider/provider/demo", String.class);
​
        return object;
    }
​
}
  • 从上可以看到,请求地址 http://demo-provider/provider/demo ,这里是通过服务名 demo-provider 来调用里面的接口。说明这里默认就是支持负载均衡的。

5.2 方式二:使用服务消费 Feign 框架

  • Fegin 框架封装了 RestTemplate 完成服务消费功能,以更加简洁的方式来消费服务提供者

5.2.1 导入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>

5.2.2 配置启动类 @EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient   //服务消费者身份启动
@EnableFeignClients     //开启 Feign 进行服务调用
public class DemoConsumerApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(DemoConsumerApplication.class, args);
    }
​
}

5.2.3 使用 Feign,需要写一个接口 PrviderServier

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
​
@FeignClient("demo-provider")  //参数配置是服务提供者的服务名称
@RequestMapping("/provider")
public interface ProviderService {
​
    @RequestMapping("/demo")
    public String demo();
​
}

5.2.4 编写 controller

@RestController
@RequestMapping("/consumer")
public class Demo {
​
    // 方法一:使用 RestTemplate 工具类调用
    @Autowired
    private RestTemplate template;
​
    // 方法二:使用服务消费 Fegin 框架
    @Autowired
    private ProviderService providerService;
​
    // 方法一
    @RequestMapping("/getData")
    public String test(){
        //参数1:请求地址
        //参数2:响应返回值
        //参数3:请求参数
        String object = template.getForObject("http://demo-provider/demo", String.class);
        System.out.println("调用:"+ object);
        return object;
    }
​
    // 方法二:使用服务消费 Fegin 框架
    @RequestMapping("/getData2")
    public String test2(){
        String demo = providerService.demo();
        System.out.println("调用:" + demo);
        return demo;
    }
​
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值