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

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

关联知识:

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

内容提要:

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

服务调用实现

原生方式调用

服务注册中心使用nacos。

项目示例步骤:

  1. 建Module:微服务起名为openfeign-consumer
  2. 改pom:引入以下依赖
xml 复制代码
    <dependencies>
        <!--Nacos服务注册-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

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

spring:
  application:
    # 服务注册时使用的别名
    name: openfeign-consumer
  cloud:
    nacos:
      discovery:
        # nacos的地址
        server-addr: localhost:8848
  1. 主启动:在src下创建如下主启动类
java 复制代码
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类
java 复制代码
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();
    }

}
java 复制代码
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:引入以下依赖
xml 复制代码
    <dependencies>
        <!--Openfeign服务调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <!--Nacos依赖中不包括loadbalancer依赖,而openfeign需要loadbalancer依赖,因此需要单独引入-->
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!--Nacos服务注册-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

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

spring:
  application:
    # 服务注册时使用的别名
    name: openfeign-consumer1
  cloud:
    nacos:
      discovery:
        # nacos的地址
        server-addr: localhost:8848
  1. 主启动:在src下创建如下主启动类
java 复制代码
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微服务,创建如下接口类
java 复制代码
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类
java 复制代码
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 访问微服务接口,能正确返回信息
相关推荐
国医中兴4 分钟前
边缘计算中的存储挑战与解决方案
微服务·云原生·容器·kubernetes·k8s
迷藏49410 分钟前
# 发散创新:用Locust实现高并发场景下的精准压力测试实战在现代微服务架构中,**系统稳定性与性能瓶颈的识别能力直接决定了产品上线后
java·python·微服务·架构·压力测试
AskHarries12 分钟前
他用20年拿下WSBK冠军,而你还没开始做第一个产品
后端
￰meteor17 分钟前
23种设计模式 -【抽象工厂】
后端·设计模式
武子康26 分钟前
大数据-257 离线数仓 - 数据质量监控详解:从理论到Apache Griffin实践
大数据·hadoop·后端
liangblog37 分钟前
Spring Boot中手动实例化 `JdbcTemplate` 并指定 数据源
java·spring boot·后端
羊小猪~~43 分钟前
算法/力扣--栈与队列经典题目
开发语言·c++·后端·考研·算法·leetcode·职场和发展
Evand J44 分钟前
【MATLAB例程】基于EKF的分布式卡尔曼滤波,用于多个车辆的集群导航,融合IMU和GNSS、相对测量的UWB数据
开发语言·分布式·matlab
晨非辰1 小时前
Git版本控制速成:提交三板斧/日志透视/远程同步15分钟精通,掌握历史回溯与多人协作安全模型
linux·运维·服务器·c++·人工智能·git·后端
Moment1 小时前
如果想转 AI 全栈?推荐你学一下 Langchain!
前端·后端·面试