项目示例 - 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 访问微服务接口,能正确返回信息
相关推荐
程序员爱钓鱼2 分钟前
Rust String 与 &str 详解:字符串所有权、借用与转换
前端·后端·rust
阳光是sunny8 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
灯澜忆梦9 小时前
GO_并发编程---定时器
开发语言·后端·golang
阳光是sunny9 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
皮皮林5519 小时前
开源实力派,给本地 AI 装上深度调研能力,一张 3090 跑到 95.7 分!
后端
努力的小雨10 小时前
把 Windows 桌面图标做成一个会自己运转的小世界
后端
武子康10 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
腾渊信息科技公司11 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
IT_陈寒12 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化