Spring Cloud OpenFeign

news2024/11/17 1:35:10

RestTemplate 是springweb组建

作为Spring Cloud的子项目之一,Spring Cloud OpenFeign 是一种声明式、模板化的 HTTP 客户端,在 Spring Cloud 中使用 OpenFeign,可以做到使用 HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。同时OpenFeign通过集成Ribbon实现客户端的负载均衡

nacos-server : 注册中心,解决是服务的注册与发现

Ribbon:客户端负载均衡器,解决的是服务集群负载均衡的问题

OpenFeign:声明式 HTTP 客户端 、代替Resttemplate组件,实现远程调用

演示案例说明

订单跟积分    订单的增删改影响积分增删改

新建积分微服务

pom依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

 

application.properties

spring:
  application:
    name: integral
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.59.12:8848,192.168.59.12:8858,192.168.59.12:8868
        username: nacos
        password: nacos



server:
  port: 9003

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class IntegralApplication {

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

}

暴露接口

@RestController
@RequestMapping("/integral")
public class IntegralController {


    @RequestMapping("/save")
    public Map save(@RequestBody Integral integral){
        System.out.println(integral);
        Map<String, Object> map = new HashMap<>();
        map.put("status",0);
        map.put("msg","添加成功");
        return map;
    }

    @RequestMapping("/update")
    public Map update(@RequestBody Integral integral){
        System.out.println(integral);

        HashMap<String, Object> map = new HashMap<>();
        map.put("status",0);
        map.put("msg","修改成功");
        return map;

    }


    @RequestMapping("/{id}")
    public Map deleteById(@PathVariable("id") Integer id){

        System.out.println("积分:"+id+"已经删除");

        HashMap<String, Object> map = new HashMap<>();
        map.put("status",0);
        map.put("msg","删除成功");
        return map;
    }

    @RequestMapping("/getOne")
    public Integral getOne(Integer id){

        System.out.println("查询的id为"+id+"积分对象");

        Integral integral = new Integral();

        integral.setId(id);
        integral.setType("会员积分");
        integral.setCount(500);

        return integral;
    }

    @RequestMapping("/getByCondition")
    public Integral getByCondition(Integer id,String type){

        System.out.println("id"+id);
        System.out.println("type"+type);

        Integral integral = new Integral();
        integral.setCount(8000);
        integral.setType(type);
        integral.setId(id);
        return integral;
    }
    
    @RequestMapping("/getAll")
    public List<Integral> getAll(){

        Integral integral = new Integral();
        integral.setId(1);
        integral.setCount(800);
        integral.setType("bb");

        Integral integral1 = new Integral();
        integral.setId(1);
        integral.setCount(900);
        integral.setType("aa");

        Integral integral2 = new Integral();
        integral.setId(1);
        integral.setCount(100);
        integral.setType("cc");

        List<Integral> integrals = Arrays.asList(integral, integral1, integral2);
        return integrals;

    }
}

实体类

实体类放在common 项目里  通过依赖引用

 

 

public class Integral {

    private Integer id;
    private Integer count;
    private String type;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Integral{" +
                "id=" + id +
                ", count=" + count +
                ", type='" + type + '\'' +
                '}';
    }
}

 

 

Openfeign使用

openfeign依赖 在order项目使用

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

 1.在order的启动类增加@EnableFeignClients  开启Openfeign   并且指定扫描哪里

 

 2.写接口声明

@FeignClient  写了接口声明  指定是哪个暴露接口

这里是一个接口  方法名跟路径 参数等 要跟积分暴露接口里的完全一致

注意:这里如果参数时对象 要加@RequestBody注解

           是路径参数{id}类似要加@PathVariable注解  delete/1

           是参数kv形式的加@RwquestParam注解   ?id=1&&name=张三

 

@FeignClient("integral")
@RequestMapping("/integral")
public interface IntegralApi {

    @RequestMapping("/save")
    public Map save(@RequestBody  Integral integral);

    @RequestMapping("/update")
    public Map update(@RequestBody Integral integral);

    @RequestMapping("/{id}")
    public Map deleteById(@PathVariable("id") Integer id);

    @RequestMapping("/getOne")
    public Integral getOne(@RequestParam("id") Integer id);

    @RequestMapping("/getByCondition")
    public Integral getByCondition(@RequestParam("id") Integer id,@RequestParam("Type") String type);

    @RequestMapping("/getAll")
    public List<Integral> getAll();



}

接口调用

@RestController
@RequestMapping("/orders")
public class OrderController {
    @Autowired
    private IntegralApi integralApi;

//    

    @RequestMapping("/saveIntegral")
    public String saveIntegral() {
        Integral integral = new Integral();
        integral.setId(1);
        integral.setCount(9527);
        integral.setType("促销活动");
        Map save = integralApi.save(integral);
        System.out.println(save);
        return "ok";
    }

    @RequestMapping("/update")
    public String testUpdate() {

        Integral integral = new Integral();
        integral.setId(1);
        integral.setCount(9527);
        integral.setType("促销活动");
        Map save = integralApi.update(integral);
        System.out.println(save);
        return "ok";

    }

    @RequestMapping("/delete/{id}")
    public String testDelete(@PathVariable("id") Integer id){

        Map map = integralApi.deleteById(id);
        System.out.println(map);
        return "ok";
    }

    @RequestMapping("/getOne")
    public String getOne(Integer id){
        System.out.println(id);

        Integral one = integralApi.getOne(id);
        System.out.println(one);
        return "ok";
    }

    @RequestMapping("/getByCondition")
    public String getByCondition(Integer id, String type){

        Integral byCondition = integralApi.getByCondition(id, type);
        System.out.println(byCondition);
        return "ok";
    }

    @RequestMapping("/getAll")
    public String getAll(){
        List<Integral> all = integralApi.getAll();
        System.out.println(all);
        return "ok";
    }

}

实例访问

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java自封装加密摘要工具类

首先 可以去看这篇文章 Java md5加密 - 酷盖的小机灵 - 博客园 MessageDigest&#xff08;加密&#xff09;_禅悟刂的博客-CSDN博客_messagedigest 在实际开发中&#xff0c;需要将用户的密码这种敏感字段加密后存储到数据库中&#xff0c;千万不可以用明文存储。 加密原理 为…

[旭日X3派] 初识篇 - 02

开局先给整个详细产品参数~ 处理器地平线旭日 X3M 芯片CPU四核 ARM Cortex-A531.2GHzBPU双核 1GHz&#xff0c;等效算力 5 TOPS内存2G/4G Byte LPDDR4存储器外置TF卡摄像头MIPI CSI 2lane 2显示接口HDMI 1 (up to 1920 1080); MIPI-DSI 1 (up to 1920 1080);USB HostUSB …

[Android移动安全渗透基础教程] 工具篇

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 0x01 从 Play Store中提取 .apk 文件 1.1 问题的来源 当想要从 Play S…

ComponentOne Studio WPF部署功能完全兼容

ComponentOne Studio WPF部署功能完全兼容 ComponentOne WPF Edition是一组易于使用的WPF组件&#xff0c;包括.NET应用程序的高级网格、图表、报告和调度控件。ComponentOne WPF控件使用XAML构建&#xff0c;以促进团队协作&#xff0c;并与Windows Presentation Foundation的…

ChatGPT ,能替代程序员吗?

最近朋友圈都在聊一个ai&#xff0c;知乎甚至一度上了热榜&#xff0c;现在已经有540个回答了 好嘛&#xff0c;既然咱也是个程序员&#xff0c;这不得体验一波&#xff1f; 当我火急火燎的点开时 乳化&#xff0c;赤裸裸的乳化&#xff01; 体验 问题不大&#xff0c;还有闲…

Nacos的服务心跳

nacos的实例分为临时实例和永久实例两种,相应的不同的实例会用有不同的心跳机制. 临时实例基于心跳方式做健康检测,永久实例是有Nacos主动探测实例状态. 可以通过在yaml文件配置. spring:application:name: order-servicecloud:nacos:discovery:ephemeral: false # 设置实例为…

举个栗子~Minitab 技巧(6):使用 T 检验 分析产品质量

在企业生产过程中&#xff0c;我们往往需要对产品质量负责。最常见的场景是&#xff0c;如何判断生产线中的产品&#xff0c;是否满足质量标准&#xff1f;比如&#xff0c;某工厂现有一批产品&#xff0c;目标生产重量是 20g&#xff0c;通过随机抽取不同的产品&#xff0c;如…

springsecurity

目录 一、权限管理简介 1、什么是权限管理 2、认证 2、基于资源的访问控制 三、Spring Security概述 1&#xff0c;Spring Security简介 2、Spring Security快速入门 2.1、引入依赖 2.2、创建一个控制器 2.3、启动项目 四、Spring Security 认证配置 1、WebSecurity…

公司自研组件库打包之后chunk.css文件25W行代码

项目场景&#xff1a; 基于Antd开发的UI组件库&#xff0c;主要分为两部分。 一部分是基础组件&#xff0c;直接在Antd的基础上包了一层&#xff0c;然后根据自身需求拓展了新的功能。如&#xff1a; input的状态除了本身支持的error和warning两种&#xff0c;额外增加了成功的…

手写JS—深拷贝

什么是深拷贝 一个引用对象一般来说由两个部分组成&#xff1a;一个具名的Handle&#xff0c;也就是我们所说的声明&#xff08;如变量&#xff09;和一个内部&#xff08;不具名&#xff09;的对象&#xff0c;也就是具名Handle的内部对象。它在Manged Heap&#xff08;托管堆…

Real diff算法是怎么运作的?

React 的 Reconciliation 算法原理 React 的渲染机制 Reconciliation 过程 React 采用的是虚拟 DOM (即 VDOM )&#xff0c;每次属性 (props) 和状态 (state) 发生变化的时候&#xff0c;render 函数返回不同的元素树&#xff0c;React 会检测当前返回的元素树和上次渲染的元素…

论文阅读笔记 | 三维目标检测——PV-RCNN算法

如有错误&#xff0c;恳请指出。 文章目录1. 背景2. 网络结构2.1 Feature Encoder and Proposal Generation2.2 voxel-to-keypoint scene encoding2.3 Keypoint-to-grid RoI Feature Abstraction3. 实验部分paper&#xff1a;《PV-RCNN: Point-Voxel Feature Set Abstraction f…

JavaScript -- DOM事件总结

文章目录事件1 事件对象简介2 Event对象3 冒泡4 事件的委派5 事件的捕获事件 1 事件对象简介 事件对象是由浏览器在事件触发时所创建的对象&#xff0c;这个对象中封装了事件相关的各种信息通过事件对象可以获取到事件的详细信息比如&#xff1a;鼠标的坐标、键盘的按键…浏览…

单频信号的相位谱计算与误差修正-附Matlab代码

一、问题描述 我们在实际处理时经常遇到只有一个正弦信号的情况&#xff0c;其频率为 f0{{f}_{0}}f0​&#xff0c;在谱分析以后&#xff0c;除了在频率为 f0{{f}_{0}}f0​处有相位数值外&#xff0c;其他频率处都有相位数值&#xff0c;分析其他频谱出现相位值的原因。 例如…

外部tomcat资源整合

Spring Boot应用默认是以jar包方式运行的&#xff0c;Springboot默认有内置的tomcat&#xff0c;在启动的时候会自动的将项目发布&#xff0c;这样各有利弊。 优点&#xff1a;简单&#xff0c;便携 缺点&#xff1a;不支持jsp, 定制优化比较麻烦&#xff0c;需要自己编写ser…

如何开发一个婚恋交友系统?开发功能特点有什么?

婚恋平台为年轻人开启了一个交流恋爱的方式&#xff0c;一方面为的是适龄的年轻单身人士&#xff0c;另一方面为一部分大龄单身人士&#xff0c;解决单很多身人 士的需求&#xff0c;婚恋平台的开发&#xff0c;跟随着互联网的发展&#xff0c;抢占了小程序的热门市场&#xf…

Java线程实现

内容引用自《深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff09;周志明》 线程的实现 我们知道&#xff0c;线程是比进程更轻量级的调度执行单位&#xff0c;线程的引入&#xff0c;可以把一个进程的资源分配和 执行调度分开&#xff0c;各个…

React框架入门

React是用于构建用户界面的JavaScript库&#xff0c; 起源于Facebook的内部项目&#xff0c;该公司对市场上所有 JavaScript MVC框架都不满意&#xff0c;决定自行开发一套&#xff0c;用于架设Instagram的网站。于2013年5月开源 一、React简介 React以声明式编写 UI&a…

0119 动态规划 Day8

剑指 Offer 10- I. 斐波那契数列 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xff09;。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1…

计算机的硬件系统和软件系统的关系

计算机的硬件系统和软件系统的关系是缺一不可。 硬件它是所有软件运行的物质基础。 与硬件直接接触的是操作系统&#xff0c;它处在硬件和其他软件之间&#xff0c;表示它向下控制硬件&#xff0c;向上支持其他软件。 在操作系统之外的各层分别是各种语言处理程序、数据库管理…