Spring Cloud之Feign客户端调用工具

推荐 7 个牛哄哄 Spring Cloud 实战项目 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,这就是微服务架构的架构概念,通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 关于微服务相关的学习资料不多,而 GitHub 上的开源项目可以作为你微服务之旅的第一站。本文推荐 7 个非常火的微服务项目,从入门到实战,这篇文章值得收藏。 01.不二之选 第一个推荐的项目是高赞教程:PiggyMetrics ,这个开源项目是你开启微服务之旅的不二之选。 PiggyMetrics是一个很全面的微服务实践入门的实例集,它可以指导开.. 阅读详情

Spring Cloud之Feign客户端调用工具

feign介绍

Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用。

 

Spring Cloud 支持 RestTemplate  Fetin

Feign客户端实际开发中用的最多 ,易读性比较强。

  

主要调用部分:

pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5</groupId>
  <artifactId>order</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
	</parent>
	<!-- 管理依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.M7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!-- SpringBoot整合Web组件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- SpringBoot整合eureka客户端 -->
		<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-openfeign</artifactId>
		</dependency>
       
	</dependencies>
	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>

 yml:

###服务启动端口号
server:
  port: 8002
###服务名称(服务注册到eureka名称)  
spring:
    application:
        name: app-toov5-order
###服务注册到eureka地址
eureka:
  client:
    service-url:
           defaultZone: http://127.0.0.1:8100/eureka

           
###因为该应用为注册中心,不会注册自己
    register-with-eureka: true
###是否需要从eureka上获取注册信息
    fetch-registry: true

  

 Feign

package com.toov5.Feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(name="app-toov5-member")   //name就是服务名称
public interface MemberFeign {
   //Feign书写方式 以Spring mvc接口形式书写
    
    @RequestMapping("/getMember")   //接口形式  实现是交给Member实现的
    public String getMember();  //底层自动转换成http协议实现rpc远程调用
    
}

controller

package com.toov5.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.toov5.Feign.MemberFeign;

@RestController
public class FeignController {
     @Autowired
     private MemberFeign memberFeign;
    
     @RequestMapping("/getFeignMember")
     public String feignMember() {
        return memberFeign.getMember();
     }
}

启动类:

package com.toov5;

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

@SpringBootApplication(scanBasePackages={"com.toov5.*"})
@EnableEurekaClient
@EnableFeignClients   //可以开启feign客户端权限   
public class AppOrder {
  public static void main(String[] args) {
    SpringApplication.run(AppOrder.class, args);
}
  //解决RestTemplate找不到问题  把restTemplate注册到Spring Boot容器中
//  @Bean
//  @LoadBalanced   手写的 不要去实现本地负载均衡效果了
//  RestTemplate restTemplate() {  
//      return new RestTemplate();
//  }
//  
}

 

 

Member(不用变) 服务提供者不变

 

  pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5</groupId>
  <artifactId>member</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
	</parent>
	<!-- 管理依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.M7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!-- SpringBoot整合Web组件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- SpringBoot整合eureka客户端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
	</dependencies>
	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
  
</project>

  yml:

###服务启动端口号
server:
  port: 8009
###服务名称(服务注册到eureka名称)  
spring:
    application:
        name: app-toov5-member
###服务注册到eureka地址
eureka:
  client:
    service-url:
    ##当前会员注册到eureka服务  地址+端口号 
           defaultZone: http://127.0.0.1:8100/eureka
           
###因为该应用为注册中心,不会注册自己
    register-with-eureka: true
###是否需要从eureka上获取注册信息
    fetch-registry: true

  controller

package com.toov5.api.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MemberApiController {
    @Value("${server.port}")
    private String serverPort;
    
    @RequestMapping("/getMember")
  public String getMember() {
        return "会员服务"+serverPort;
  }
}

启动类

package com.toov5.api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient   //注册到eureka
public class AppMember {
   
    public static void main(String[] args) {
        SpringApplication.run(AppMember.class, args);
    }
    
}  

Eureka

pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5</groupId>
  <artifactId>SpringCloud-eureka-server</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
	</parent>
	<!-- 管理依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.M7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!--SpringCloud eureka-server -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
	</dependencies> 
	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
  
</project>

yml:

###eureka 服务端口号
server:
  port: 8100
###服务注册名称
eureka:
  instance:
  ##注册中心ip地址
    hostname: 127.0.0.1
###客户端调用地址
  client:
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
###因为该应用为注册中心,不会注册自己 (集群设为true)
    register-with-eureka: false
###因为自己为注册中心 ,不会去在该应用中的检测服务 
    fetch-registry: false

  启动:

package com.toov5;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer   //开启注册中心
@SpringBootApplication 
public class AppEureka {
  
     public static void main(String[] args) {
           SpringApplication.run(AppEureka.class, args);
    }
    
}

 

  

 

【SpringCloud】(一文通)SpringCloud 环境和工程搭建 SpringCloud 前言 阅读详情

相关推荐

springCloud入门级例子

## 模块介绍 - eurekaserve 服务注册模块 - api-gateway 路由模块 - server-bi 业务service - servcie-system 系统service - hystrixdashboard hystrix监控service 无需注册 # 注册中心 - [原版官网](https://cloud.spring.io/spring-cloud-static/Finchley.M6/single/spring-cloud.html) - [中文版](https://springcloud.cc/spring-cloud-dalston.html) ## 简单配置方法(12.4 Standalone Mode) ``` spring: application: name: spring-cloud-eureka server: port: 1111 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ ``` ## 高可用集群配置(12.5 Peer Awareness) ``` #改成3个- spring: application: name: spring-cloud-eureka profiles: peer1 server: port: 8000 eureka: instance: # 必须使用自身的hostname hostname: peer1 client: serviceUrl: # 这里的url需要使用需要高可用的hostname和port defaultZone: http://peer2:8001/eureka/ #改成3个- spring: application: name: spring-cloud-eureka profiles: peer2 server: port: 8001 eureka: instance: #必须使用自身的hostname hostname: peer2 client: serviceUrl: # 这里的url需要使用需要高可用的hostname和port defaultZone: http://peer1:8000/eureka/ ```

第三章 Spring Cloud 组件及入门案例

Spring Cloud 集成了各种微服务组件,基于 Spring Boot 实现了这些组件的自动装配,从而提供了开箱即用的效果。

qq_41946216的博客 1955

1.28寸圆屏LCD驱动开发:GC9A01与RT-Thread嵌入式实现

圆形TFT-LCD是一种面向可穿戴、IoT终端的紧凑型人机交互显示技术,其核心在于SPI/QSPI接口时序控制与GRAM内存映射原理。通过驱动芯片(如GC9A01)完成电源管理、伽马校正和MADCTL方向配置,可实现低功耗、高刷新率的图形渲染。该技术显著提升嵌入式设备的UI表现力与空间利用率,在智能手环、传感器节点、微型HMI等资源受限场景中具备突出工程价值。本文围绕1.28寸圆屏LCD模块,详解硬件接口规范、RT-Thread下QSPI驱动架构及Bresenham算法优化实践。

weixin_42599908的博客 158

SpringCloud简单入门示例

微服务框架之 springcloud 是最流行的,加上 springboot,很容易快速上手。spring cloud 有很多组件,比如 注册中心 eureka、负载均衡 ribbon、网关zuul、feign客户端、容错组件 Hystrix 等等。还有 RestTemplate 可以很容易的发起 restful api调用。由于 组件较多、并且 名字 看起来、写起来、读起来 都有点 不友好,就会觉得 学习 spring cloud 是不是很难?实际上,spring boot 做了完整的封装,对于使用者来说

htydowd的博客 3080

Cartographer从安装到实战:手把手教你运行2D/3D建图与定位

本文提供了一份详尽的Cartographer从零安装到实战应用的完整指南。内容涵盖环境准备、依赖编译、源码构建等关键步骤,并手把手指导读者运行2D/3D官方数据集进行建图与定位测试。文章深入解析了参数配置与自定义数据适配方法,帮助开发者快速掌握这一强大的实时同步定位与建图工具,并将其应用于机器人导航与自动驾驶等实际场景。

rice5的博客 951

玩转Isaac Sim动态控制:从随机舞动到精准操控Franka的5种控制模式实测

本文深入实测了在NVIDIA Isaac Sim仿真平台中,利用Dynamic Control模块对Franka机械臂进行精准操控的五种核心模式:位置控制、单关节位置控制、速度控制、单关节速度控制和力矩控制。通过详细的代码示例和对比分析,阐述了每种模式的适用场景、参数调优技巧及从随机运动到闭环控制的实现路径,为机器人算法验证提供了实用指南。

night的博客 808

Spring Cloud 四、 rpc 调用工具 Feign 客户端

1、添加 maven依赖 添加依赖 <!-- 整合fegnin客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ope...

ws - 兮的博客空间 594

自动驾驶仿真(二)—— 基于PreScan与Simulink的联合仿真

自动驾驶仿真软件介绍二—— PreScan与Simulink联合仿真1. Prescan仿真软件2. Prescan与Simulink联合仿真2. 1 Prescan和matlab软件安装2. 2 联合仿真配置3. 联合仿真实例3.1 一辆不按法规行驶的小车3.2 另一辆的正常行驶的小车3.3 视觉辅助摄像机3.4 传感器检测4. 系列学习视频教程5. 参考学习的书目教材 上一篇博文简单介绍了Carsim与Simulink联合仿真,接着这篇就再继续简单介绍另一款自动驾驶仿真软件Prescan,并且简单做个P

zhudj08的博客 1万+

【Spring Cloud】声明式Feign客户端调用工具

【学习背景】 通过前面的总结学习,我们可以回想下,是通过什么方式做到服务间的调用的?答案是:Ribbon+RestTemplate,且通过@LoadBalanced注解实现了客户端的负载均衡。本篇博客将介绍另一种调用方式,Feign。Feign也使用了ribbon,只要使用@FeignClient时,ribbon就会自动使用。 【学习内容】 1. Feign框架介绍 Feign 是一个声明web服...

Dream it Possible 780

【机器人】线性方程最小二乘解法对机械臂DH参数进行标定

1.前言 看了一篇文章,觉得里面的DH参数标定法讲的很清晰,便使用Matlab复现了一下,效果还可以,特写此文记录。 2.原理 2.1.误差最佳值的最小二乘计算 有研究结果表明:几乎95%的机器人位置误差都是由机器人内部运动学的不准确描述引起的,所以对DH模型参数进行标定是很有必要的。 DH参数物理含义:选自《机器人学、机器视觉与控制-Matlab基础》 当DH参数确定后,我们...

要恰饭得嘛 1万+

Boost变换电路在新能源车充电系统中的创新应用与挑战

本文探讨了Boost变换电路在新能源车充电系统中的创新应用与挑战,重点分析了其在高压快充、能量回收等场景中的技术突破。通过电力电子仿真和新型器件应用,如SiC MOSFET,显著提升了功率密度和转换效率。同时,文章还深入讨论了电磁兼容性(EMC)挑战及智能控制算法的实际应用,为新能源车充电系统的优化提供了实用解决方案。

7z8x2c4v6b9的博客 217

Spring Cloud之声明式客户端调用工具Feign

一、简介 feign 整合了rabbion 和 hytrix,完美兼容了spring mvc,使服务调用变得简单。 二、Ribbon和Feign的区别 Spring Cloud中支持两种客户端调用工具: 1.是Ribbon中的RestTemplate 2.是Feign Ribbon:是一个基...

chuizhangtu6311的博客 250

js逆向实战:爬取淘宝男装商品

本文介绍了一个淘宝商品数据爬取程序的技术实现方案。该程序通过分析淘宝H5页面接口,实现了商品名称、价格、销量等关键信息的抓取,并支持图片下载功能。核心内容包括:1. 使用Request库发送HTTP请求获取数据;2. 通过逆向分析淘宝的签名算法(MD5加密)生成合法请求;3. 解析JSON数据并提取商品信息;4. 处理分页参数实现多页数据爬取;5. 将数据保存为CSV文件并下载商品图片。程序还实现了反爬虫绕过、错误处理、文件管理等辅助功能,完整展示了从数据采集到存储的全过程。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1573

Spring-Cloud组件之ribbon 、IRule 、Feign

Spring-Cloud组件之ribbon、IRule 、Feignribbon是什么?客户端负载均衡? 服务端负载均衡?接下来我们看看如何使用吧接下来我们来聊聊 Ribbon对于负载均衡策略-------IRuleSpring Cloud 声明式服务调用 -----Feign ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的...

qq_33486185的博客 1010

YOLOv11改进策略【卷积层】| ICCV-2023 引入Dynamic Snake Convolution动态蛇形卷积,改进C3k2

基于拓扑几何约束的动态蛇卷积用于管状结构分割DSConv(Dynamic Snake Convolution,动态蛇形卷积)模块的设计主要是为了更好地处理管状结构的分割任务,解决传统卷积在处理细管状结构时的不足。

Limiiiing的博客 1629

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring Cloud跨服务调用:Feign + HTTP极简实战,10分钟搞定高可用通信(附源码)

简单实现跨服务调用接口避免重复开发,优势: 与 Spring 生态无缝集成,支持负载均衡、熔断降级。

简单发点工作中用到的,或者记录下小知识点 521

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

springcloud通过Feign做服务调用实例

Feign是声明式的web service客户端,它让微服务的调用变得更简单了,类似Controller调用service。SpringCloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。只需要创建一个接口,然后添加注解即可Resttemplate需要先定义一个Resttemplate的类注册到bean中使用 同时在进行服务调用的时候要进行url的拼接。Feign可以伪装成类似SpringMVC的controller一样,将rest的请求进行隐藏,不用再自己拼接ur

haokelaicds的博客 1735

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Feign远程调用

有关微服务中,服务与服务如何通信,我已经给大家介绍了Ribbon远程调用的相关知识,不知道大家有没有发现Ribbon的问题呢? Ribbon的问题 在Ribbon中,如果我们想要发起一个调用,是这样的: @Resource private RestTemplate restTemplate String result = restTemplate.getForObject("http://my-goods/goods/get", String.class); Goods goods = JSONObjec

liaozijian的博客 702

java feign请求pathvariable_Ribbon 和 Feign 的区别

spring cloud的 Netflix 中提供了两个组件实现软负载均衡调用:ribbon 和 feign 。Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置 RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐。FeignFeign 是在 Ribbon的基础上进行...

weixin_39553653的博客 212

SpringCloud Feign 声明式服务调用

  服务调用有2种方式:rest、rpc,springcloud使用RestTemplate实现rest调用,还可以使用feign进行声明式的远程http服务调用,所谓声明式就是通过服务接口来调用,和rpc相似。   使用feign进行服务调用 feign是一种服务调用方式,自然是在消费者中使用的   1、创建时勾选Spring Cloud Routing -> OpenFeign,或者手动添加依赖 <dependency> <groupId&g

chy-x 的博客 749

springcloud 视图微服务-Feign

什么是Feign? Feign 是什么呢? Feign 是对 Ribbon的封装,使用注解的方式,调用起来更简单。。。 也是主流的方式 咱们比较一下Ribbon和Feign的区别 Ribbon: public List<Product> listProdcuts() { return restTemplate.getForObject("http://PRODUCT-DATA-SERVICE/products",List.class); } Feign: @FeignClient(va

qq_41585840的博客 219

SpringCloud整合Feign

一)、是什么 Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它地使用方法是定义一个接口,然后再上面添加注解。同时也支持JAX-RS标准注解。Feign也支持可插拔式地编译器和解码器。Spring cloud对Feign进行了封装,使其支持SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。 Feign是一个声明式的Web服务客户端,使得编写web服务.

铭 1132

spring cloud feign 微服务间文件传输处理

介绍 Feign 作为 Spring Cloud 中 RPC 工具,利用注解来描述接口,简化了 Java HTTP Client 的调用过程,隐藏了实现细节。 本文将介绍利用 Feign 上传文件的几个常见问题。 引入包 <!-- Feign进行跨服务传递文件依赖 --> <dependency> <g...

唐家麦兜 4560

SpringCloud Ribbon / Feign

ribbon、feign

qq_45968950的博客 665

Spring Cloud 的组件有哪些

Spring Cloud主要组件包括服务发现(Eureka)、配置中心(Config)、网关(Gateway/Zuul)、负载均衡(Ribbon/Feign)、熔断器(Hystrix)、服务跟踪(Sleuth)、安全(Security)、消息总线(Bus)等。这些组件共同支撑微服务架构的核心功能。

weixin_46084191的博客 863
上一篇: Spring Cloud之Ribbon与Nginx区别
下一篇: Spring Cloud之Feigin客户端重构思想
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值