freeRTOS总结(十四)任务通知

1、任务通知

任务通知: 用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值
使用队列、信号量、事件标志组时都需另外创建一个结构体,通过中间的结构体进行间接通信!
在这里插入图片描述
使用任务通知时,任务结构体TCB中就包含了内部对象,可以直接接收别人发过来的"通知"
在这里插入图片描述
也就是说任务通知实现任务之间不同过中间结构体完成消息通讯

任务通知值的更新方式
不覆盖接受任务的通知值
覆盖接受任务的通知值
更新接受任务通知值的一个或多个bit
增加接受任务的通知值
只要合理,灵活的利用任务通知的特点,可以在一些场合中替代队列、信号量、事件标志组!

任务通知的优势及劣势
任务通知的优势:
效率更高:使用任务通知向任务发送事件或数据比使用队列、事件标志组或信号量快得多
使用内存更小 使用其他方法时都要先创建对应的结构体,使用任务通知时无需额外创建结构体
任务通知的劣势:
无法发送数据给ISR:ISR没有任务结构体,所以无法给ISR发送数据。但是ISR可以使用任务通知的功能,发数据给任务。
无法广播给多个任务 :任务通知只能是被指定的一个任务接收并处理
无法缓存多个数据:任务通知是通过更新任务通知值来发送数据的,任务结构体中只有一个任务通知值,只能保持一个数据。
发送受阻不支持阻塞:发送方无法进入阻塞状态等待

2,任务通知值和通知状态

任务都有一个结构体:任务控制块TCB,它里边有两个结构体成员变量:
在这里插入图片描述

任务通知值
任务通知值的更新方式有多种类型:
计数值(数值累加,类似信号量)
相应位置一(类似事件标志组)
任意数值(支持覆写和不覆写,类似队列)

任务通知状态
其中任务通知状态共有3种取值:
在这里插入图片描述

任务未等待通知 :任务通知默认的初始化状态
等待通知:接收方已经准备好了(调用了接收任务通知函数),等待发送方给个通知
等待接收:发送方已经发送出去(调用了发送任务通知函数),等待接收方接收

3,任务通知相关API函数介绍(熟悉)

任务通知API函数主要有两类:①发送通知 ,②接收通知。
注意:发送通知API函数可以用于任务和中断服务函数中;接收通知API函数只能用在任务中。
①发送通知相关API函数:
在这里插入图片描述

#define   	xTaskNotifyAndQuery( xTaskToNotify ,  ulValue ,  eAction ,  pulPreviousNotifyValue  )	 \   xTaskGenericNotify( ( xTaskToNotify ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( ulValue ), ( eAction ),( pulPreviousNotifyValue ) )
#define	xTaskNotify  (  xTaskToNotify ,  ulValue ,  eAction  ) 							\   xTaskGenericNotify(  ( xTaskToNotify ) ,  ( tskDEFAULT_INDEX_TO_NOTIFY ) ,  ( ulValue ) ,  ( eAction ) ,  NULL  )
#define 	xTaskNotifyGive(  xTaskToNotify  )									 \   xTaskGenericNotify(  ( xTaskToNotify ) ,  ( tskDEFAULT_INDEX_TO_NOTIFY ) ,  ( 0 ) ,   eIncrement ,  NULL )
BaseType_t	 xTaskGenericNotify(  TaskHandle_t 	xTaskToNotify,UBaseType_t 	uxIndexToNotify,uint32_t 		ulValue,eNotifyAction 	eAction,uint32_t * 		pulPreviousNotificationValue  )

在这里插入图片描述
任务通知方式共有以下几种:

typedef  enum
{    eNoAction = 0, 			/* 无操作 */eSetBits				/* 更新指定bit */eIncrement				/* 通知值加一 */eSetValueWithOverwrite		/* 覆写的方式更新通知值 */eSetValueWithoutOverwrite	/* 不覆写通知值 */
} eNotifyAction;

在这里插入图片描述
当任务通知用作于信号量时,使用函数获取信号量:ulTaskNotifyTake()
当任务通知用作于事件标志组或队列时,使用此函数来获取: xTaskNotifyWait()

#define ulTaskNotifyTake( xClearCountOnExit  ,   xTicksToWait ) 			\
ulTaskGenericNotifyTake( ( tskDEFAULT_INDEX_TO_NOTIFY ),			\				( xClearCountOnExit ), 					\				( xTicksToWait ) ) 

此函数用于接收任务通知值,可以设置在退出此函数的时候将任务通知值清零或者减一
在这里插入图片描述
在这里插入图片描述

#define xTaskNotifyWait(	ulBitsToClearOnEntry, 			\				ulBitsToClearOnExit, 			\				pulNotificationValue, 			\				xTicksToWait) 				\
xTaskGenericNotifyWait( 	tskDEFAULT_INDEX_TO_NOTIFY, 	\				( ulBitsToClearOnEntry ), 			\				( ulBitsToClearOnExit ), 			\				( pulNotificationValue ), 			\				( xTicksToWait )               ) 

此函数用于获取通知值和清除通知值的指定位值,适用于模拟队列和事件标志组,使用该函数来获取任务通知 。

BaseType_t    xTaskGenericNotifyWait( 	UBaseType_t 	uxIndexToWaitOn,						uint32_t 		ulBitsToClearOnEntry,						uint32_t 		ulBitsToClearOnExit,						uint32_t * 		pulNotificationValue,						TickType_t 		xTicksToWait	    ); 

在这里插入图片描述
在这里插入图片描述

4,任务通知模拟信号量实验(掌握)

1、实验目的:学习使用 FreeRTOS 中的任务通知功能模拟二值信号量和计数型信号量
2、实验设计:将设计三个任务:start_task、task1、task2
三个任务的功能如下:
start_task 用来创建task1和task2任务
task1 用于按键扫描,当检测到按键KEY0被按下时,将发送任务通知
task2 用于接收任务通知,并打印相关提示信息


#include "freertos_demo.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/KEY/key.h"
#include "./SYSTEM/delay/delay.h"
#include "./MALLOC/malloc.h"
/*FreeRTOS*********************************************************************************************/
#include "FreeRTOS.h"
#include "task.h"
#include "event_groups.h"
/******************************************************************************************************/
/*FreeRTOS配置*//* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
/* TASK1 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/#define START_TASK_PRIO         1
#define START_TASK_STACK_SIZE   128
TaskHandle_t    start_task_handler;
void start_task( void * pvParameters );#define TASK1_PRIO         2
#define TASK1_STACK_SIZE   128
TaskHandle_t  task1_handler;
void task1( void * pvParameters );/* TASK2 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK2_PRIO         3
#define TASK2_STACK_SIZE   128
TaskHandle_t   task2_handler;
void task2( void * pvParameters );/*** @brief       FreeRTOS例程入口函数* @param       无* @retval      无*/void freertos_demo(void)
{ xTaskCreate((TaskFunction_t) start_task,(char *)	"start_task",(configSTACK_DEPTH_TYPE) START_TASK_STACK_SIZE,(void *) NULL,(UBaseType_t) START_TASK_PRIO,(TaskHandle_t *)&start_task_handler);//开启任务调度vTaskStartScheduler();}
void start_task( void * pvParameters )
{taskENTER_CRITICAL();               /* 进入临界区  任何任务和中断都不能打断当前程序运行*/xTaskCreate((TaskFunction_t) task1,(char *)	"task1",(configSTACK_DEPTH_TYPE) TASK1_STACK_SIZE,(void *) NULL,(UBaseType_t) TASK1_PRIO,(TaskHandle_t *)&task1_handler	);xTaskCreate((TaskFunction_t) task2,(char *)	"task2",(configSTACK_DEPTH_TYPE) TASK2_STACK_SIZE,(void *) NULL,(UBaseType_t) TASK2_PRIO,(TaskHandle_t *)&task2_handler	);vTaskDelete(NULL);//删除当前任务也就是开始任务taskEXIT_CRITICAL();}
/* 任务一,用于扫描按键,当KEY0按下,发送任务通知值 */
void task1( void * pvParameters )
{uint8_t key;while(1){key=key_scan(0);if(key==KEY0_PRES){printf("任务通知模拟二值信号量释放!\r\n");//发送通知不带通知值 参数为通知的任务句柄xTaskNotifyGive(task2_handler);}vTaskDelay(10);}}
/* 任务二,读取队列集中的消息并打印*/
void task2( void * pvParameters )
{uint32_t rev =0 ;while(1){//返回值为任务调用期间接收到的任务通知次数rev=ulTaskNotifyTake(pdTRUE,portMAX_DELAY);if(rev!=0){printf("接收任务通知成功,模拟获取二值信号量!\r\n");printf("rev val is %ld\r\n",rev);}}
}

5,任务通知模拟消息邮箱实验(掌握)

1、实验目的:学习使用 FreeRTOS 中的任务通知功能模拟消息邮箱
2、实验设计:将设计三个任务:start_task、task1、task2
三个任务的功能如下:
start_task 用于按键扫描,将按下的按键键值通过任务通知发送给指定任务
task2 用于接收任务通知,并根据接收到的数据做相应动作


#include "freertos_demo.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/KEY/key.h"
#include "./SYSTEM/delay/delay.h"
#include "./MALLOC/malloc.h"
/*FreeRTOS*********************************************************************************************/
#include "FreeRTOS.h"
#include "task.h"
#include "event_groups.h"
/******************************************************************************************************/
/*FreeRTOS配置*//* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define START_TASK_PRIO         1
#define START_TASK_STACK_SIZE   128
TaskHandle_t    start_task_handler;
void start_task( void * pvParameters );/* TASK1 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK1_PRIO         2
#define TASK1_STACK_SIZE   128
TaskHandle_t    task1_handler;
void task1( void * pvParameters );/* TASK2 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK2_PRIO         3
#define TASK2_STACK_SIZE   128
TaskHandle_t    task2_handler;
void task2( void * pvParameters );/******************************************************************************************************/
/*** @brief       FreeRTOS例程入口函数* @param       无* @retval      无*/
void freertos_demo(void)
{    xTaskCreate((TaskFunction_t         )   start_task,(char *                 )   "start_task",(configSTACK_DEPTH_TYPE )   START_TASK_STACK_SIZE,(void *                 )   NULL,(UBaseType_t            )   START_TASK_PRIO,(TaskHandle_t *         )   &start_task_handler );vTaskStartScheduler();
}void start_task( void * pvParameters )
{taskENTER_CRITICAL();               /* 进入临界区 */xTaskCreate((TaskFunction_t         )   task1,(char *                 )   "task1",(configSTACK_DEPTH_TYPE )   TASK1_STACK_SIZE,(void *                 )   NULL,(UBaseType_t            )   TASK1_PRIO,(TaskHandle_t *         )   &task1_handler );xTaskCreate((TaskFunction_t         )   task2,(char *                 )   "task2",(configSTACK_DEPTH_TYPE )   TASK2_STACK_SIZE,(void *                 )   NULL,(UBaseType_t            )   TASK2_PRIO,(TaskHandle_t *         )   &task2_handler );vTaskDelete(NULL);taskEXIT_CRITICAL();                /* 退出临界区 */
}/* 任务一,发送任务通知值 */
void task1( void * pvParameters )
{uint8_t key = 0;while(1) {key = key_scan(0);if((key != 0) && (task2_handler != NULL)){printf("任务通知模拟消息邮箱发送,发送的键值为:%d\r\n",key);xTaskNotify( task2_handler, key, eSetValueWithOverwrite );}vTaskDelay(10);}
}/* 任务二,接收任务通知值 */
void task2( void * pvParameters )
{uint32_t noyify_val = 0;while(1){xTaskNotifyWait( 0, 0xFFFFFFFF, &noyify_val, portMAX_DELAY );switch(noyify_val){case KEY0_PRES:{printf("接收到的通知值为:%d\r\n",noyify_val);LED0_TOGGLE();break;}case KEY1_PRES:{printf("接收到的通知值为:%d\r\n",noyify_val);LED1_TOGGLE();break;}default : break;}}
}

任务通知模拟事件标志组实验(掌握)

1、实验目的:学习使用 FreeRTOS 中的任务通知功能模拟事件标志组
2、实验设计:将设计三个任务:start_task、task1、task2
三个任务的功能如下:
start_task 用来创建task1和task2任务
task1 用于按键扫描,当检测到按键按下时,发送任务通知设置不同标志位
task2 用于接收任务通知,并打印相关提示信息

#define START_TASK_PRIO         1
#define START_TASK_STACK_SIZE   128
TaskHandle_t    start_task_handler;
void start_task( void * pvParameters );#define TASK1_PRIO         2
#define TASK1_STACK_SIZE   128
TaskHandle_t  task1_handler;
void task1( void * pvParameters );/* TASK2 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK2_PRIO         3
#define TASK2_STACK_SIZE   128
TaskHandle_t   task2_handler;
void task2( void * pvParameters );#define EVENTBIT_0  (1 << 0)
#define EVENTBIT_1  (1 << 1)/*** @brief       FreeRTOS例程入口函数* @param       无* @retval      无*/void freertos_demo(void)
{ xTaskCreate((TaskFunction_t) start_task,(char *)	"start_task",(configSTACK_DEPTH_TYPE) START_TASK_STACK_SIZE,(void *) NULL,(UBaseType_t) START_TASK_PRIO,(TaskHandle_t *)&start_task_handler);//开启任务调度vTaskStartScheduler();}
void start_task( void * pvParameters )
{taskENTER_CRITICAL();               /* 进入临界区  任何任务和中断都不能打断当前程序运行*/xTaskCreate((TaskFunction_t) task1,(char *)	"task1",(configSTACK_DEPTH_TYPE) TASK1_STACK_SIZE,(void *) NULL,(UBaseType_t) TASK1_PRIO,(TaskHandle_t *)&task1_handler	);xTaskCreate((TaskFunction_t) task2,(char *)	"task2",(configSTACK_DEPTH_TYPE) TASK2_STACK_SIZE,(void *) NULL,(UBaseType_t) TASK2_PRIO,(TaskHandle_t *)&task2_handler	);vTaskDelete(NULL);//删除当前任务也就是开始任务taskEXIT_CRITICAL();}
/* 任务一,用于扫描按键,当KEY0按下,发送任务通知值 */
void task1( void * pvParameters )
{uint8_t key;while(1){key=key_scan(0);if(key==KEY0_PRES){printf("将bit0位置为1\r\n");xTaskNotify(task2_handler,EVENTBIT_0,eSetBits);}else if(key==KEY1_PRES){printf("将bit1位置为1\r\n");xTaskNotify(task2_handler,EVENTBIT_1,eSetBits);}vTaskDelay(10);}}
/* 任务二,读取队列集中的消息并打印*/
void task2( void * pvParameters )
{uint32_t rev =0 ;uint32_t event_bit =0;while(1){//接收前通知值不清零,接收后通知值全部清零,通知值给到revxTaskNotifyWait(0,0xFFFFFFFF,&rev,portMAX_DELAY);if(rev&EVENTBIT_0){event_bit|=EVENTBIT_0;}if(rev&EVENTBIT_1){event_bit|=EVENTBIT_1;}if(event_bit==(EVENTBIT_0|EVENTBIT_1)){printf("任务通知模拟事件标志组接收成功!!\r\n");event_bit=0;}}
}

7、模拟计数信号量

#include "freertos_demo.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/KEY/key.h"
#include "./SYSTEM/delay/delay.h"
#include "./MALLOC/malloc.h"
/*FreeRTOS*********************************************************************************************/
#include "FreeRTOS.h"
#include "task.h"
#include "event_groups.h"
/******************************************************************************************************/
/*FreeRTOS配置*//* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
/* TASK1 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/#define START_TASK_PRIO         1
#define START_TASK_STACK_SIZE   128
TaskHandle_t    start_task_handler;
void start_task( void * pvParameters );#define TASK1_PRIO         2
#define TASK1_STACK_SIZE   128
TaskHandle_t  task1_handler;
void task1( void * pvParameters );/* TASK2 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK2_PRIO         3
#define TASK2_STACK_SIZE   128
TaskHandle_t   task2_handler;
void task2( void * pvParameters );/*** @brief       FreeRTOS例程入口函数* @param       无* @retval      无*/void freertos_demo(void)
{ xTaskCreate((TaskFunction_t) start_task,(char *)	"start_task",(configSTACK_DEPTH_TYPE) START_TASK_STACK_SIZE,(void *) NULL,(UBaseType_t) START_TASK_PRIO,(TaskHandle_t *)&start_task_handler);//开启任务调度vTaskStartScheduler();}
void start_task( void * pvParameters )
{taskENTER_CRITICAL();               /* 进入临界区  任何任务和中断都不能打断当前程序运行*/xTaskCreate((TaskFunction_t) task1,(char *)	"task1",(configSTACK_DEPTH_TYPE) TASK1_STACK_SIZE,(void *) NULL,(UBaseType_t) TASK1_PRIO,(TaskHandle_t *)&task1_handler	);xTaskCreate((TaskFunction_t) task2,(char *)	"task2",(configSTACK_DEPTH_TYPE) TASK2_STACK_SIZE,(void *) NULL,(UBaseType_t) TASK2_PRIO,(TaskHandle_t *)&task2_handler	);vTaskDelete(NULL);//删除当前任务也就是开始任务taskEXIT_CRITICAL();}
/* 任务一,用于扫描按键,当KEY0按下,发送任务通知值 */
void task1( void * pvParameters )
{uint8_t key;while(1){key=key_scan(0);if(key==KEY0_PRES){printf("任务通知模拟计数信号量被释放\r\n");xTaskNotifyGive(task2_handler);}vTaskDelay(10);}}
/* 任务二,读取队列集中的消息并打印*/
void task2( void * pvParameters )
{uint32_t rev =0 ;while(1){rev=ulTaskNotifyTake(pdFALSE,portMAX_DELAY);if(rev!=0){printf("rev:%d\r\n",rev);}vTaskDelay(1000);}
}

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

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

相关文章

Flink流式数据倾斜

1. 流式数据倾斜 流式处理的数据倾斜和 Spark 的离线或者微批处理都是某一个 SubTask 数据过多这种数据不均匀导致的&#xff0c;但是因为流式处理的特性其中又有些许不同 2. 如何解决 2.1 窗口有界流倾斜 窗口操作类似Spark的微批处理&#xff0c;直接两阶段聚合的方式来解决…

详细分析python中的from waitress import serve(附Demo)

目录 前言1. 基本知识2. serve源码分析3. 基本操作 前言 以前玩python 开发的时候写过一些见解&#xff0c;推荐阅读&#xff1a; uwsgi启动django以及uwsgi.ini的配置参数详解Django框架零基础入门 部署服务器除了Flask还有serve 在讲述serve之前&#xff0c;先讲述两者的…

安全名词解析-社工、0day、DDos攻击

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 社工02 0day漏洞03 DDoS攻击 01 社工 社工&#xff08;Social Engineering&#xff09;&#xff0c;一般指社会工程攻击的简称&#xff0c;是一种通过与人的交互来获取信息、获取访问权限或进行欺骗…

前端vue3实现本地及在线文件预览(含pdf/txt/mp3/mp4/docx/xlsx/pptx)

一、仅需实现在线预览&#xff0c;且文件地址公网可访问 &#xff08;一&#xff09;微软office免费预览&#xff08;推荐&#xff09; 支持doc/docx/xls/xlsx/ppt/pptx等多种office文件格式的免费预览 //示例代码//​在https://view.officeapps.live.com/op/view.aspx?src…

【Qt】Android上运行keeps stopping, Desktop上正常

文章目录 问题 & 背景背景问题 解决方案One More ThingTake Away 问题 & 背景 背景 在文章【Qt】最详细教程&#xff0c;如何从零配置Qt Android安卓环境中&#xff0c;我们在Qt中配置了安卓开发环境&#xff0c;并且能够正常运行。 但笔者在成功配置并完成上述文章…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第10章 项目进度管理(三)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

2024/2/7总结

Node.js 什么是node.js node.js是一个基于chrome v8 引擎的 JavaScript 运行环境。 浏览器是JavaScript的前端运行环境node.js是JavaScript的后端运行环境 node.js中无法调用DOM和BOM等浏览器内置API fs模块 是node.js官方提供的、用来操作文件的模块&#xff0c;它提供了一系…

初识 Protobuf 和 gRpc

初步了解 Protobuf 和 gRpc Protocol Buffers Protocol Buffers&#xff08;又称protobuf&#xff09;是谷歌的语言无关、平台无关、可扩展的机制&#xff0c;用于序列化结构化数据。您可以在protobuf的文档中了解更多关于它的信息。 ProtoBuf 的定义 ProtoBuf是将类的定义…

PostgreSql与Postgis安装

POstgresql安装 1.登录官网 PostgreSQL: Linux downloads (Red Hat family) 2.选择版本 3.安装 ### 源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm ### 客户端 yum install postgresql14 ###…

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查 本套教程配套有录播课程和私教课程&#xff0c;欢迎私信我。 Docker部署ElasticSearch7 创建基本容器 docker run -itd --name elasticsearch -p 9200:9200 -e "discovery.typesingle-node" -e ES_JAVA_…

Docker的镜像和容器的区别

1 Docker镜像 假设Linux内核是第0层&#xff0c;那么无论怎么运行Docker&#xff0c;它都是运行于内核层之上的。这个Docker镜像&#xff0c;是一个只读的镜像&#xff0c;位于第1层&#xff0c;它不能被修改或不能保存状态。 一个Docker镜像可以构建于另一个Docker镜像之上&…

P2957

题目描述 The cows enjoy mooing at the barn because their moos echo back, although sometimes not completely. Bessie, ever the excellent secretary, has been recording the exact wording of the moo as it goes out and returns. She is curious as to just how mu…

numa网卡绑定

#概念 参考&#xff1a;https://www.jianshu.com/p/0f3b39a125eb(opens new window) chip&#xff1a;芯片&#xff0c;一个cpu芯片上可以包含多个cpu core&#xff0c;比如四核&#xff0c;表示一个chip里4个core。 socket&#xff1a;芯片插槽&#xff0c;颗&#xff0c;跟…

Sping Cloud Hystrix 参数配置、简单使用、DashBoard

Sping Cloud Hystrix 文章目录 Sping Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数C…

Docker容器监控-CIG

目录 一、CIG说明 1. CAdvisor 2. InfluxDB 3. Grafana 二、环境搭建 1. 创建目录 2. 编写 docker-compose.yml 3. 检查并运行容器 三、进行测试 1. 查看 influxdb 存储服务 是否能正常访问 2. 查看 cAdvisor 收集服务能否正常访问 3. 查看 grafana 展现服务&#…

金融行业专题|证券超融合架构转型与场景探索合集(2023版)

更新内容 更新 SmartX 超融合在证券行业的覆盖范围、部署规模与应用场景。新增操作系统信创转型、Nutanix 国产化替代、网络与安全等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎阅读文末电子书。 在金融行业如火如荼的数字化转型大潮中&#xff0c;传统架…

路由器如何映射端口映射?

在现代互联网中&#xff0c;随着网络应用的不断发展&#xff0c;很多用户需要进行远程访问或搭建服务器来满足自己的需求。由于网络安全的原因&#xff0c;直接将内网设备暴露在公网中是非常危险的。为了解决这个问题&#xff0c;路由器映射端口映射技术应运而生。本文将介绍什…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Span组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Span组件 鸿蒙&#xff08;HarmonyOS&#xff09;作为Text组件的子组件&#xff0…

【开源】JAVA+Vue+SpringBoot实现公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

微信小程序新手入门教程四:样式设计

WXSS (WeiXin Style Sheets)是一套样式语言&#xff0c;用于描述 WXML 的组件样式&#xff0c;决定了 WXML 的组件会怎么显示。 WXSS 具有 CSS 大部分特性&#xff0c;同时为了更适合开发微信小程序&#xff0c;WXSS 对 CSS 进行了扩充以及修改。与 CSS 相比&#xff0c;WXSS …