若依框架-Feign的应用

article/2025/7/20 22:53:57

代码资料链接:https://download.csdn.net/download/ly1h1/90945836

 

1.背景

若依的微服务框架,少不了各微服务之间的接口调用,以下是采用feign来进行微服务之间的方法调用。

2.案例说明

在system模块下的某个接口,调用factory(定制化微服务)的接口方法。

(注意:多入参用(自定义模型那种)POST,普通单个变量采用Get,本人使用的感受,不然会报错)

3.factory被调用方说明

3.1.接口层创建接口controller

(直接在自动生成的接口文件里面写2个接口方法)

 3.1.1 接口代码编写,注意RequiresPermissions和GetMapping路径

package com.ruoyi.factory.controller;import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;import com.ruoyi.common.core.domain.R;
import com.ruoyi.factory.api.domain.FaFactoryconfigVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.factory.domain.FaAbnormalinformation;
import com.ruoyi.factory.service.IFaAbnormalinformationService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;/*** 异常信息Controller* * @author ruoyi* @date 2025-06-01*/
@RestController
@RequestMapping("/abnormalinformation")
public class FaAbnormalinformationController extends BaseController
{@Autowiredprivate IFaAbnormalinformationService faAbnormalinformationService;/*** 查询异常信息列表*/@RequiresPermissions("factory:abnormalinformation:list")@GetMapping("/list")public TableDataInfo list(FaAbnormalinformation faAbnormalinformation){startPage();List<FaAbnormalinformation> list = faAbnormalinformationService.selectFaAbnormalinformationList(faAbnormalinformation);return getDataTable(list);}/*** 导出异常信息列表*/@RequiresPermissions("factory:abnormalinformation:export")@Log(title = "异常信息", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, FaAbnormalinformation faAbnormalinformation){List<FaAbnormalinformation> list = faAbnormalinformationService.selectFaAbnormalinformationList(faAbnormalinformation);ExcelUtil<FaAbnormalinformation> util = new ExcelUtil<FaAbnormalinformation>(FaAbnormalinformation.class);util.exportExcel(response, list, "异常信息数据");}/*** 获取异常信息详细信息*/@RequiresPermissions("factory:abnormalinformation:query")@GetMapping(value = "/{abnormalinformationId}")public AjaxResult getInfo(@PathVariable("abnormalinformationId") Long abnormalinformationId){return success(faAbnormalinformationService.selectFaAbnormalinformationByAbnormalinformationId(abnormalinformationId));}/*** 新增异常信息*/@RequiresPermissions("factory:abnormalinformation:add")@Log(title = "异常信息", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody FaAbnormalinformation faAbnormalinformation){return toAjax(faAbnormalinformationService.insertFaAbnormalinformation(faAbnormalinformation));}/*** 修改异常信息*/@RequiresPermissions("factory:abnormalinformation:edit")@Log(title = "异常信息", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody FaAbnormalinformation faAbnormalinformation){return toAjax(faAbnormalinformationService.updateFaAbnormalinformation(faAbnormalinformation));}/*** 删除异常信息*/@RequiresPermissions("factory:abnormalinformation:remove")@Log(title = "异常信息", businessType = BusinessType.DELETE)@DeleteMapping("/{abnormalinformationIds}")public AjaxResult remove(@PathVariable Long[] abnormalinformationIds){return toAjax(faAbnormalinformationService.deleteFaAbnormalinformationByAbnormalinformationIds(abnormalinformationIds));}/*** 查询工厂配置列表*/@RequiresPermissions("factory:abnormalinformation:remoteabnormallist")@PostMapping("/remoteabnormallist")public R<List<FaFactoryconfigVO>> remoteabnormallist(@RequestBody  FaFactoryconfigVO faFactoryconfigVO){faFactoryconfigVO.setFactoryCode("123");faFactoryconfigVO.setFactoryCode("2345");List<FaFactoryconfigVO> LIS= new ArrayList<>();LIS.add(faFactoryconfigVO);return R.ok(LIS);}/*** 查询工厂配置列表 @GetMapping(value = "/{factoryconfigId}")*/@RequiresPermissions("factory:abnormalinformation:getabnormalremotelist")@GetMapping(value = "/getabnormalremotelist/{abnormalid}")public R<List<FaFactoryconfigVO>> getabnormalremotelist(@PathVariable("abnormalid") Long abnormalid){FaFactoryconfigVO faFactoryconfigVO = new FaFactoryconfigVO();faFactoryconfigVO.setFactoryCode("123");faFactoryconfigVO.setFactoryCode("2345");List<FaFactoryconfigVO> LIS= new ArrayList<>();LIS.add(faFactoryconfigVO);return R.ok(LIS);}}

3.1.2 数据模型VO(统一被调用方ruoyi-api下编写,调用方直接引用) 

package com.ruoyi.factory.api.domain;import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;public class FaAbnormalInformationVO  extends BaseEntity
{private static final long serialVersionUID = 1L;/** 工厂主键 */private Long factoryconfigId;/** 工厂编号 */@Excel(name = "工厂编号")private String factoryCode;/** 工厂名称 */@Excel(name = "工厂名称")private String factoryName;public void setFactoryconfigId(Long factoryconfigId){this.factoryconfigId = factoryconfigId;}public Long getFactoryconfigId(){return factoryconfigId;}public void setFactoryCode(String factoryCode){this.factoryCode = factoryCode;}public String getFactoryCode(){return factoryCode;}public void setFactoryName(String factoryName){this.factoryName = factoryName;}public String getFactoryName(){return factoryName;}@Overridepublic String toString() {return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE).append("factoryconfigId", getFactoryconfigId()).append("factoryCode", getFactoryCode()).append("factoryName", getFactoryName()).append("remark", getRemark()).toString();}
}

 3.2 接口层ruoyi-api模块下,编写对外暴露的接口代码

 3.2.1 调用接口Interface

package com.ruoyi.factory.api;import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.factory.api.domain.FaFactoryconfigVO;
import com.ruoyi.factory.api.factory.RemoteAbnormalInformationFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;import java.util.ArrayList;
import java.util.List;/*** 工厂服务* * @author ruoyi*/
@FeignClient(contextId = "remoteAbnormalInformationService", value = ServiceNameConstants.FACRORY_SERVICE, fallbackFactory = RemoteAbnormalInformationFallbackFactory.class)
public interface RemoteAbnormalInformationService
{@PostMapping("/abnormalinformation/remoteabnormallist")public R<List<FaFactoryconfigVO>> remoteabnormallist(@RequestBody FaFactoryconfigVO faFactoryconfigVO);@GetMapping("/abnormalinformation/getabnormalremotelist/{factoryconfigId2}")public R<List<FaFactoryconfigVO>> getabnormalremotelist(@PathVariable("factoryconfigId2") Long factoryconfigId2);
}

3.2.2 降级机制代码Factory

package com.ruoyi.factory.api.factory;import com.ruoyi.common.core.domain.R;
import com.ruoyi.factory.api.RemoteAbnormalInformationService;
import com.ruoyi.factory.api.RemoteFactoryConfigService;
import com.ruoyi.factory.api.domain.FaFactoryconfigVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;import java.util.ArrayList;
import java.util.List;/*** 用户服务降级处理* * @author ruoyi*/
@Component
public class RemoteAbnormalInformationFallbackFactory implements FallbackFactory<RemoteAbnormalInformationService>
{private static final Logger log = LoggerFactory.getLogger(RemoteFactoryConfigFallbackFactory.class);@Overridepublic RemoteAbnormalInformationService create(Throwable throwable){log.error("异常服务调用失败:{}", throwable.getMessage());return new RemoteAbnormalInformationService(){@Overridepublic R<List<FaFactoryconfigVO>> remoteabnormallist(FaFactoryconfigVO faFactoryconfigVO){return R.fail("异常信息失败:" + throwable.getMessage());}@Overridepublic R<List<FaFactoryconfigVO>> getabnormalremotelist(Long factoryconfigId2){return R.fail("异常信息失败:" + throwable.getMessage());}};}
}//@RequiresPermissions("factory:abnormalinformation:remoteabnormallist")
//@PostMapping("/remoteabnormallist")
//public R<List<FaFactoryconfigVO>> remoteabnormallist(@RequestBody FaFactoryconfigVO faFactoryconfigVO)
//{
//    faFactoryconfigVO.setFactoryCode("123");
//    faFactoryconfigVO.setFactoryCode("2345");
//    List<FaFactoryconfigVO> LIS= new ArrayList<>();
//    LIS.add(faFactoryconfigVO);
//    return R.ok(LIS);
//}
//
//
///**
// * 查询工厂配置列表 @GetMapping(value = "/{factoryconfigId}")
// */
//@RequiresPermissions("factory:abnormalinformation:getabnormalremotelist")
//@GetMapping(value = "/getabnormalremotelist/{abnormalid}")
//public R<List<FaFactoryconfigVO>> getabnormalremotelist(@PathVariable("abnormalid") Long abnormalid)
//{
//    FaFactoryconfigVO faFactoryconfigVO = new FaFactoryconfigVO();
//    faFactoryconfigVO.setFactoryCode("123");
//    faFactoryconfigVO.setFactoryCode("2345");
//    List<FaFactoryconfigVO> LIS= new ArrayList<>();
//    LIS.add(faFactoryconfigVO);
//    return R.ok(LIS);
//}

4.system调用方说明

4.1 启动类代码Application,注意需要将Bean的扫表目录加上调用方路径,如果不加的话,会出现空指针的情况。

3.2.3 system模块下找一个调用的接口方法里面,编写调用的代码

package com.ruoyi.system.controller;import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.factory.api.RemoteAbnormalInformationService;
import com.ruoyi.factory.api.RemoteFactoryConfigService;
import com.ruoyi.factory.api.domain.FaFactoryconfigVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.domain.RpCompanyconfig;
import com.ruoyi.system.service.IRpCompanyconfigService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;/*** 公司配置Controller* * @author ruoyi* @date 2025-05-25*/
@RestController
@RequestMapping("/companyconfig")
public class RpCompanyconfigController extends BaseController
{@Autowiredprivate IRpCompanyconfigService rpCompanyconfigService;@Autowiredprivate RemoteFactoryConfigService remoteFactoryConfigService;@Autowiredprivate RemoteAbnormalInformationService remoteAbnormalInformationService;/*** 查询公司配置列表*/@RequiresPermissions("system:companyconfig:list")@GetMapping("/list")public TableDataInfo list(RpCompanyconfig rpCompanyconfig){startPage();
//        FaFactoryconfigVO test= new FaFactoryconfigVO();
//        test.setFactoryCode("1");
//        test.setFactoryName("2");
//        R<List<FaFactoryconfigVO>> ASD= remoteFactoryConfigService.remotelist(test);
//        Long longget=2L;
//        R<List<FaFactoryconfigVO>> ASD2=remoteFactoryConfigService.getremotelist(longget);FaFactoryconfigVO test= new FaFactoryconfigVO();test.setFactoryCode("1");test.setFactoryName("2");R<List<FaFactoryconfigVO>> ASD= remoteAbnormalInformationService.remoteabnormallist(test);Long longget=2L;R<List<FaFactoryconfigVO>> ASD2=remoteAbnormalInformationService.getabnormalremotelist(longget);List<RpCompanyconfig> list = rpCompanyconfigService.selectRpCompanyconfigList(rpCompanyconfig);return getDataTable(list);}/*** 公司名称下拉列表*/@RequiresPermissions("system:companyconfig:list")@GetMapping("/selectCompanyData")public TableDataInfo selectCompanyData(){RpCompanyconfig rpCompanyconfig=new RpCompanyconfig();rpCompanyconfig.setRemark("1");List<RpCompanyconfig> list = rpCompanyconfigService.selectRpCompanyconfigList(rpCompanyconfig);return getDataTable(list);}/*** 导出公司配置列表*/@RequiresPermissions("system:companyconfig:export")@Log(title = "公司配置", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, RpCompanyconfig rpCompanyconfig){List<RpCompanyconfig> list = rpCompanyconfigService.selectRpCompanyconfigList(rpCompanyconfig);ExcelUtil<RpCompanyconfig> util = new ExcelUtil<RpCompanyconfig>(RpCompanyconfig.class);util.exportExcel(response, list, "公司配置数据");}/*** 获取公司配置详细信息*/@RequiresPermissions("system:companyconfig:query")@GetMapping(value = "/{companyId}")public AjaxResult getInfo(@PathVariable("companyId") Long companyId){return success(rpCompanyconfigService.selectRpCompanyconfigByCompanyId(companyId));}/*** 新增公司配置*/@RequiresPermissions("system:companyconfig:add")@Log(title = "公司配置", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody RpCompanyconfig rpCompanyconfig){return toAjax(rpCompanyconfigService.insertRpCompanyconfig(rpCompanyconfig));}/*** 修改公司配置*/@RequiresPermissions("system:companyconfig:edit")@Log(title = "公司配置", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody RpCompanyconfig rpCompanyconfig){return toAjax(rpCompanyconfigService.updateRpCompanyconfig(rpCompanyconfig));}/*** 删除公司配置*/@RequiresPermissions("system:companyconfig:remove")@Log(title = "公司配置", businessType = BusinessType.DELETE)@DeleteMapping("/{companyIds}")public AjaxResult remove(@PathVariable Long[] companyIds){return toAjax(rpCompanyconfigService.deleteRpCompanyconfigByCompanyIds(companyIds));}
}

 4.调试效果


http://www.hkcw.cn/article/CIgINRSFYO.shtml

相关文章

印度奥迪沙邦一巴士翻车 50余人被困 紧急救援展开

6月2日,一辆巴士在印度东部奥迪沙邦的山路上发生翻车事故,车内50多名乘客被困。事故发生在当天清晨,巴士在下坡过程中于弯道上失去平衡,导致车辆失控。事故发生后,当地村民和紧急救援人员迅速展开救援行动,当地政府也派出救援队赶往现场。目前,官方尚未公布具体的伤亡情…

从4小时到20分钟 青岛港科技升级货物“秒通关”

作为中国北方重要的国际航运枢纽,青岛港的航线通达全球700多个港口,一季度集装箱吞吐量同比增速达到了7.4%。在当下复杂多变的国际贸易形势下,这座港口如何找准方向为外贸企业“保驾护航”?港口“流量”剧增折射外贸新机遇在山东港口青岛港前湾港区,这艘前往美国东部的集装…

Flannel MAC地址冲突导致Pod 跨节点通信异常

问题背景 客户在扩容 Kubernetes 节点后&#xff0c;发现部分服务 Pod 跨节点通信异常&#xff0c;表现为&#xff1a; • Pod 间通信间歇性失败&#xff1b; • 某些业务服务异常或响应慢&#xff1b; • 怀疑是网络问题引起的。 问题排查 1️⃣ 初步排查网络路由信息 我们…

[前端计算机网络]资源加载过程的详细性能信息浏览器加载资源的全过程

资源加载过程的详细性能信息 基于 PerformanceResourceTiming 对象对页面中某个资源加载过程的详细性能信息进行采集与封装&#xff0c;并结合了计算机网络中的请求生命周期进行度量。 export function observeEvent():void{const type"resource";const entryHand…

德布劳内将接受那不勒斯体检 加盟在即

据报道,德布劳内将加盟那不勒斯。预计他将在比利时国家队比赛结束后接受那不勒斯的体检。上月公布的比利时世预赛名单中包括了德布劳内。比利时队将在世预赛中先后对阵北马其顿和威尔士,其中与威尔士的比赛将于本月10日北京时间2点45分开球。现年33岁的德布劳内在今夏合同到期…

《在人间》是2025最难看懂的剧吗 烧脑剧情挑战观众

《在人间》这部剧集让艺绽君感到难以评价。这种“难评”并非贬义,而是因为观剧过程中真实地感受到了大脑爆炸、脑细胞死了不少,只能用一个相对中立的词汇来形容这部“神剧”。《在人间》共8集,隶属于爱奇艺的微尘剧场,这一剧场以短小精悍的作品著称。主创团队中有知名导演兼…

警方辟谣北京有人高空撒一千万:不是故意的,系工人施工碰倒钱箱 干活不慎掉落

5月29日,北京昌平区住总万科天地一带发生了一起撒钱事件。有市民发帖称,有人在楼上撒了一千万元。视频画面显示,空中飘着几张纸币,一些市民在楼下接钱。次日,北京七里渠派出所工作人员表示,当事人是因为工作时不小心掉落了钱,并提醒市民不要听信网络谣言。至于掉落的金钱…

96岁老兵走失找回 曾为陈毅元帅送信 抗战英雄平安归家

6月2日,山东省济宁市一救援队成功找回了走失的96岁高龄抗战老兵吕企荣老人,老人身体无碍。吕企荣家住泗水县济河街道何家庄村。5月31日早晨7时许,老人从家中步行到村北侧的小公园遛弯,直到中午都没有回家。家属通过监控发现,老人沿着城区北侧万象城附近道路一直向北走,直…

地磁暴雷暴大风与暴雨交织登场 双预警齐发

6月2日6时,中央气象台发布暴雨蓝色预警和强对流天气蓝色预警,覆盖福建、广东、广西等十余省份。中国气象局国家空间天气监测预警中心指出,6月1日至3日可能连续发生地磁暴,6月2日左右,我国北部有机会出现较为明显的极光,部分地区甚至有出现红绿复合极光的可能。预计6月2日…

6月1日起 新疆伊尔克什坦口岸试行24小时货运通关

6月1日,新疆伊尔克什坦口岸货运通道正式启动为期6个月的24小时通关试行。随着首批出入境货车有序通关,该口岸成为中国首个面向吉尔吉斯斯坦实行24小时货运通关的公路口岸。伊尔克什坦口岸位于新疆克孜勒苏柯尔克孜自治州乌恰县,是我国最西端的陆路口岸。口岸主要出口日用百货…

美防长炒作中国威胁论难获东盟支持 东盟强调战略自主

在新加坡举行的第22届香格里拉对话会上,美国国防部长赫格塞思极力渲染所谓的“中国威胁”,以迫使盟国增加军费开支。然而,东盟国家的国防部长们强调了“战略自主”的概念。菲律宾国防部长吉尔伯特特奥多罗表示,菲律宾作为美国的条约盟友,并非没有战略自主的棋子。他虽然仍…

Python 训练营打卡 Day 32-官方文档的阅读

我们已经掌握了相当多的机器学习和python基础知识&#xff0c;现在面对一个全新的官方库&#xff0c;看看是否可以借助官方文档的写法了解其如何使用 我们以pdpbox这个机器学习解释性库来介绍如何使用官方文档 以鸢尾花三分类项目来演示如何查看官方文档 import pandas as pd…

USB子系统和type-c接口快速理解

USB子系统 USB硬件基础 在了解LINUX 的USB驱动之前&#xff0c;我们肯定是要了解相关硬件内容的&#xff0c;如下给出了三种常用的USB接口。 特性 Type A (2.0) Type A 3.0 Type C 接口形状 长方形&#xff0c;单向插入 与 Type A 2.0 相同 椭圆形&#xff0c;可双…

DQN和DDQN(进阶版)

来源&#xff1a; *《第五章 深度强化学习 Q网络》.ppt --周炜星、谢文杰 一、前言 Q表格、Q网络与策略函数 Q表格是有限的离散的&#xff0c;而神经网络可以是无限的。 对于动作有限的智能体来说&#xff0c;使用Q网络获得当下状态的对于每个动作的 状态-动作值 。那么 a…

新视讯影视官网入口,影视动漫在线播放网站

新视讯影视是一个免费为广大追剧迷提供在线播放服务的影视平台&#xff0c;深受众多影视爱好者的喜爱。它涵盖了大量免费的VIP电视剧资源、最新上映的大片、好看的综艺节目以及动漫视频&#xff0c;是一个播放速度快、资源多的免费影视网站。用户无需注册或登录&#xff0c;即可…

张家界溶洞垃圾已清运2.7吨 排污事件引发关注

近日,有网友反映张家界市慈利县一处天然溶洞遭到人为排污,导致溶洞被污染。相关话题引发了广泛关注。据慈利县融媒体中心6月1日发布的最新视频,经过7天的努力,杨家坡溶洞内的垃圾已清理打捞出2.7吨。相关视频显示,溶洞内垃圾正在被装袋并通过吊机吊出,旁边已经摆放着大量…

杭州机场迎首批入境旅客 免签新政促便利

6月1日下午,杭州口岸迎来了首批享受免签新政的南美洲旅客。为便利中外人员往来,中方决定扩大免签国家范围,自2025年6月1日起至2026年5月31日,巴西、阿根廷、智利、秘鲁、乌拉圭五个国家持普通护照的人员来华经商、旅游观光、探亲访友、交流访问或过境不超过30天,可免办签证…

余承东为何“炮轰”友商 华为销量不及小米

华为终端BG董事长余承东在2025未来汽车先行者大会上提到,有一家公司仅凭一款车型就取得了巨大成功。尽管该公司的产品质量和智能驾驶能力并不出色,但凭借强大的品牌影响力和流量支持,依然实现了热销。余承东表示,华为的产品在质量、体验和性能方面都优于这家公司,但在销量…

患者服临床试验抗癌药致重症肺炎 临床研究用药疑云

在重庆39度的高温天气里,刘呈富推着轮椅艰难地爬坡过坎,汗流浃背,呼吸短促。坐在轮椅中的李忠美怀里抱着30多斤重的制氧机,拖着枕头状氧气袋,同样疲惫不堪。李忠美是一位45岁的宫颈癌患者,抗癌已有12年。2023年她的病情再次复发,医生推荐她使用一种名为卡度尼利单抗的注…

190头猪高速中暑晕厥消防员浇水救援 高温下的生命接力

近日,一段发生在山东泰安的救援视频在网络上广为流传,既让人忍俊不禁又感动不已。在地面温度高达43℃的酷热天气下,一辆运输生猪的货车行驶在高速公路上,车厢内的190头猪因高温中暑晕厥,情况危急。消防员迅速赶到现场展开了一场特殊的救援行动。货车司机当时心急如焚,这些…