项目示例 - 3.服务调用 - 1.Openfeign

项目示例 - 3.服务调用 - 1.Openfeign

关联知识:

  • 分布式微服务 - 3.服务调用 - 2.Openfeign

内容提要:

  • 服务调用实现:原生方式、openfeign

服务调用实现

原生方式调用

服务注册中心使用nacos。

项目示例步骤:

  1. 建Module:微服务起名为openfeign-consumer
  2. 改pom:引入以下依赖
    <dependencies>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>
  1. 写yml:在resources目录下创建application.yml文件,并做以下配置
server:
  port: 8003

spring:
  application:
    # 服务注册时使用的别名
    name: openfeign-consumer
  cloud:
    nacos:
      discovery:
        # nacos的地址
        server-addr: localhost:8848
  1. 主启动:在src下创建如下主启动类
package learn.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OpenfeignConsumer {

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

}
  1. 业务构建:创建如下配置类和controller类
package learn.demo.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使用,可以为所有的http请求统一进行配置
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

}
package learn.demo.controller;

import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/openfeign/consumer/")
public class ConsumerController {
    // 提供服务提供者注册时使用的别名
    private static final String URL_PAYMENT_PRE_ALIAS = "http://nacos-provider/nacos/provider/";
    // 服务提供者提供的接口
    private static final String PAYMENT_API = "test";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("test/alias")
    public String testAlias() {
        return restTemplate.getForObject(URL_PAYMENT_PRE_ALIAS+PAYMENT_API, String.class);
    }

}
  1. 测试:
    1. 启动nacos,浏览器中能正常打开首页
    2. 启动nacos-provider微服务,浏览器中输入localhost:8001/nacos/provider/test 访问微服务接口,能正确返回信息
    3. 启动本微服务,浏览器中输入localhost:8003/openfeign/consumer/test/alias 访问微服务接口,能正确返回信息

使用Openfeign调用

服务注册中心使用nacos。

项目示例步骤:

  1. 建Module:微服务起名为openfeign-consumer1
  2. 改pom:引入以下依赖
    <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            
            <artifactId>spring-cloud-starter-loadbalancerartifactId>
        dependency>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>
  1. 写yml:在resources目录下创建application.yml文件,并做以下配置
server:
  port: 8004

spring:
  application:
    # 服务注册时使用的别名
    name: openfeign-consumer1
  cloud:
    nacos:
      discovery:
        # nacos的地址
        server-addr: localhost:8848
  1. 主启动:在src下创建如下主启动类
package learn.demo;

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

@SpringBootApplication
@EnableFeignClients
public class OpenfeignConsumer1 {

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

}
  1. 创建服务调用接口:依照服务提供者nacos-provider微服务,创建如下接口类
package learn.demo.inter;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;

@Component
@FeignClient(value = "nacos-provider", path = "/nacos/provider/")
public interface ProviderInter {

    @GetMapping("test")
    String test();

}
  1. 业务构建:创建如下controller类
package learn.demo.controller;

import jakarta.annotation.Resource;
import learn.demo.inter.ProviderInter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/openfeign/consumer1/")
public class ConsumerController {
    @Resource
    private ProviderInter providerInter;

    @GetMapping("test")
    public String test() {
        return providerInter.test();
    }

}
  1. 测试:
    1. 启动nacos,浏览器中能正常打开首页
    2. 启动nacos-provider微服务,浏览器中输入localhost:8001/nacos/provider/test 访问微服务接口,能正确返回信息
    3. 启动本微服务,浏览器中输入localhost:8004/openfeign/consumer1/test 访问微服务接口,能正确返回信息

你可能感兴趣的:(分布式微服务,分布式,微服务,后端,spring,cloud)