openhub_OpenHub框架–下一个有趣的功能

openhub

这是有关OpenHub框架系列的第三篇文章-第一篇介绍OpenHub框架 ,第二篇介绍异步消息传递模型 。

该系列的最后一篇文章将更详细地介绍其他一些有趣的功能,并说明为什么OpenHub可以成为您的集成项目的理想选择的原因。

节流

节流是一种功能,用于检查对集成平台的输入请求的数量,如果该数量超过定义的限制,则新请求将受到限制。

节流的主要目标是通过大量的处理输入请求来限制集成平台的不成比例的(通常是故意的)过载。 这将对应用程序性能产生严重影响,甚至可能停止处理当前消息。

节流组件对来自指定源(外部)系统和特定操作的输入请求进行计数。 如果此计数在定义的时间间隔内超过定义的限制,则OpenHub将开始拒绝新的输入请求(仅来自指定源系统和指定操作的请求)–引发异常。 节流组件支持集群。

节流功能可以配置如下:

###############################################################################
#  Throttling configuration
#
#   There the following property names:
#   - throttling.defaultInterval: default time interval (in seconds) if not defined by system/operation
#   - throttling.defaultLimit: default limit if not defined by system/operation
#   - throttling.sourceSystem.operationName, where
#       - sourceSystem is specific source system or '*' if any system
#            (source system is case-insensitive value from trace header (ExternalSystemExtEnum))
#       - operationName is specific operation name or '*' if any operation
#
#   Property values (except for default values) have the following format:
#       limit [/interval]
#
#   Examples:
#       throttling.crm.op1=10
#       throttling.crm.*=10/40
#       throttling.*.sendSms=60/30
###############################################################################throttling.defaultInterval=60
throttling.defaultLimit=60
throttling.sourceSystem.*=300/60
throttling.*.syncHello=15/60
throttling.*.asyncHello=50/60

例如:

throttling.crm.op1 = 10 (从CRM系统到操作op1的调用限制为60秒内有10个请求)
throttling.crm。* = 10/40 (限制从CRM系统到40秒内10个请求的任何调用)
* .sendSms = 60/30 (限制从任何系统到30秒内60个请求的sendSms操作调用)

警报

警报定义用于监视数据库数据的度量标准,如果任何度量标准超出其限制,则会激活警报并可以执行进一步的操作。

度量是可配置的–用于获取项目计数和检查限制SQL查询。

警报示例(还包括后续操作):

  • 当最近10分钟的失败消息计数超过5时,则向管理员发送电子邮件
  • 当等待外部系统响应超过5分钟的邮件数超过10时,则向管理员发送电子邮件

默认配置示例:

###############################################################################
#  Alerts configuration
#
#   There the following property names:
#   - alerts.N.id: unique alert identification (if not defined then order number (=N) is used instead)
#   - alerts.N.limit: limit that must be exceeded to activate alert
#   - alerts.N.sql: SQL query that returns count of items for comparison with limit value
#   - [alerts.N.enabled]: if specified alert is enabled or disabled; enabled is by default
#   - [alerts.N.mail.subject]: notification (email, sms) subject; can be used Java Formatter placeholders (%s = alert ID)
#   - [alerts.N.mail.body]: notification (email, sms) body; can be used Java Formatter placeholders (%d = actual count, %d = limit)
#
################################################################################ checks if there is any waiting message that exceeds time limit for timeout
alerts.900.id=WAITING_MSG_ALERT
alerts.900.limit=0
alerts.900.sql=SELECT COUNT(*) FROM message WHERE state = 'WAITING_FOR_RES' AND last_update_timestamp < (current_timestamp - interval '3600 seconds')

注意:可以通过JMX即时设置每种配置。

预定的工作

OpenHub支持两种类型的计划作业 :

  1. 可以在随机节点上运行并可以同时执行的作业(没有条件同时启动作业
  2. 无论在哪个节点上,集群中只能运行一次的作业(注意:我们没有考虑计划的作业只能在特定节点上运行的可能性)

OpenHub框架提供了自己的用于作业定义的API。

配置示例:

@OpenHubQuartzJob(name = "AsyncPostponedJob", executeTypeInCluster = JobExecuteTypeInCluster.NOT_CONCURRENT,simpleTriggers = @QuartzSimpleTrigger(repeatIntervalMillis = 30000))
public void invokePostponedJob() {}
@OpenHubQuartzJob(name = "MoreTriggerJob", executeTypeInCluster = JobExecuteTypeInCluster.CONCURRENT,cronTriggers = {@QuartzCronTrigger(cronExpression = "0 00 23 ? * *",name = "FirstTriggerForJob",group = "MoreTriggerGroup"),@QuartzCronTrigger(cronExpression = "0 00 10 ? * *",misfireInstruction = CronTriggerMisfireInstruction.FIRE_ONCE_NOW,name = "SecondTriggerForJob",group = "MoreTriggerGroup")},simpleTriggers = {@QuartzSimpleTrigger(repeatIntervalMillis = 10000,repeatCount = 20,name = "ThirdTriggerForJob",group = "MoreTriggerGroup"),@QuartzSimpleTrigger(repeatIntervalProperty = ASYNCH_PARTLY_FAILED_REPEAT_TIME_SEC,intervalPropertyUnit = SimpleTriggerPropertyUnit.SECONDS,misfireInstruction = SimpleTriggerMisfireInstruction.FIRE_NOW,name = "FourthTriggerForJob",group = "MoreTriggerGroup")})
public void invokeJob() {}

请求/响应跟踪

请求/响应跟踪功能允许将路由之间的内部通信或与外部系统的通信保存到数据库中。 之后,您可以直接进入数据库并浏览请求响应表,或者查看管理控制台。

邮件详细信息-请求/响应跟踪

消息详细信息–请求/响应跟踪

错误处理

Apache Camel中有一个基本的错误处理 ,但是OpenHub框架有其自己的概念来处理错误:

  • 有自己的带有基本IntegrationException的异常层次结构
  • 错误目录定义了带有描述的唯一错误代码–这有助于识别源系统中的问题
  • 错误目录显示在管理控制台中
错误目录

错误目录


翻译自: https://www.javacodegeeks.com/2017/11/openhub-framework-next-interesting-features.html

openhub

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

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

相关文章

Numpy常用基础

生成Numpy的一维数组 xnp.array([1.0,2.0,3.0]) #生成数组 print(x) xnp.array([1.1,2.2,3.3]) print(y.round(1)) #矩阵的结果保留一位小数#结果 [1. 2. 3.] #生成的数组默认省略小数点后面的0 [1.1 2.2 3.3]Numpy数组的算术运算 xnp.array([1,2,3]) ynp.array([4,5,6]) …

售票系统的组件图和部署图_识读配电箱系统图

配电箱确实有很多字母&#xff0c;要熟悉这些字母的基本含义&#xff0c;才能更准确地知道配电箱系统图的意思。网上查了一些资料&#xff0c;发现配电箱中的字母实在是太多了&#xff0c;先简单说几个需要基本认识的字母&#xff1a;GCK、GCS、MNS是低压抽出式开关柜&#xff…

Linux命令之 -- export 设置/显示系统环境变量

文章目录一、命令介绍二、export 的原理&#xff08;一&#xff09;什么是进程&#xff08;二&#xff09;父子进程关系&#xff08;三&#xff09;子 shell 如何访问父 shell 的变量&#xff08;export 实现原理&#xff09;&#xff08;四&#xff09;父 shell 如何访问子 sh…

packt_Packt和Java Code Geeks提供的$ 5 Java编程书籍!

packt你好&#xff0c;极客&#xff01; 今天&#xff0c;我们为您带来一些激动人心的消息&#xff01; Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说&#xff0c;Java仍然是最强大的选择之一&#xff0c;它是定义企业和移动设备的语言。 本…

Matplotlib常用库方法

模块pyplot常用方法 import matplotlib.pyplot as plt #pyplot模块包含很多用于生成图表的函数plt.plot(x,y,format_string) #x,y分别为x轴y轴的坐标值&#xff0c;第三个参数是风格&#xff0c;具体去查&#xff0c;这方法的参数很麻烦 plt.xlabel(x,fontsize14) #显示x轴的…

MacBook 如何一次性关闭所有程序的通知消息

特别反感应用程序经常弹出通知消息&#xff0c;挨个去关闭应用程序的通知消息又特别麻烦&#xff0c;可以打开『勿扰模式』&#xff0c;这就可以屏蔽掉所有的通知消息了。

反射获取list泛型_Android 从浅到懂使用反射机制

定义Java 反射机制是发生在运行状态中&#xff0c;对于任何一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任何一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。使用…

谷歌 recaptcha_在Spring Boot应用程序中使用Google reCaptcha

谷歌 recaptcha介绍 Google的reCaptcha是一个库&#xff0c;用于防止漫游器将数据提交到您的公共表单或访问您的公共数据。 在本文中&#xff0c;我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例…

数学建模python教材推荐_数模竞赛专攻python应该准备什么?

想起以前打开Matlab就不忍心关掉的阴影(无SSD打开及其慢)。没有什么非要二选一&#xff0c;喜欢哪个用哪个都行&#xff0c;两个都试试比一比也行&#xff0c;比赛更不会关心你的结果图哪儿来的(小孩才。。。大人全都。。。)。Matlab有Matlab的好处&#xff0c;非常成熟的软件包…

python中if __name__ == ‘__main__‘:的简单理解

举例说明&#xff0c;这里有两个模块 # ni模块 print("这是1.") if __name__ __main__:print("这是2.")输出结果: 这是1.这是2. #wo模块 import ni print("这是3.")输出结果: 这是1这是3 总结&#xff1a; 运行自己的模块时会运行if _…

Linux 命令之 wget -- 下载文件工具

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;下载并以不同的文件名保存&#xff08;二&#xff09;下载单个文件&#xff08;三&#xff09;限速下载&#xff08;四&#xff09;断点续传&#xff08;五&#xff09;使用 wget 后台下载…

创建react应用程序_使用SpringWebFlux的React式Web应用程序

创建react应用程序1.React式编程简介 React式编程是为具有以下特征的应用程序创造的术语&#xff1a; 非阻塞应用 事件驱动和异步 需要少量线程来垂直扩展&#xff08;即在JVM中&#xff09; 就像面向对象的编程&#xff0c;函数式编程或过程式编程一样&#xff0c;React式…

获取当地天气_Mac 天气预报动态壁纸工具Living Weather HD 4.4.4

这款独特的非凡应用程序将天气呈现在您的桌面上&#xff0c;它能够预报天气状况&#xff0c;并在桌面上使用相应的美丽动态壁纸场景。 天气HD也可以用作屏保。 主要功能&#xff1a; ● 在桌面上了解世界各地当前的天气状况和未来状况 ● 与当前天气状况、今天或明天预报相应的…

Linux 命令之 curl 的选项(英文版)

Usage: curl [options...] <url> Options: (H) means HTTP/HTTPS only, (F) means FTP only--anyauth Pick "any" authentication method (H) 可以使用“任何”身份验证方法-a, --append Append to target file when uploading (F/SFTP) 上传文件…

获取文件夹下的文件名并存入txt中

import os path_imgsC:/Users/13451/Desktop/pic #图片存放的地址 for files in os.listdir(path_imgs): #listdir函数获取文件夹下图片的名字,返回包含所有文件名字的列表with open(C:/Users/13451/Desktop/train_data.txt,a) as f: f.write(files.rstrip(.png)) #只保存名…

javaparser_JavaParser生成,分析和修改Java代码

javaparser作为开发人员&#xff0c;我们经常鄙视手动进行重复工作的人员。 我们认为&#xff0c; 他们应该实现这一目标 。 尽管如此&#xff0c;我们还是进行与编码有关的所有活动。 当然&#xff0c;我们使用的高级IDE可以为我们执行一些重构&#xff0c;但这基本上就结束…

计算机系统组成_网络教育统考计算机应用基础题库(计算机系统的组成2)

点击蓝字关注我哦11在微型计算机的各种设备中&#xff0c;既用于输入又可用于输出的设备是____。A、磁盘驱动器B、键盘C、鼠标D、绘图仪点击空白处查看答案参考答案:A12计算机的硬件系统由五大部分组成&#xff0c;下列各项中不属于这五大部分的是______。A、运算器B、软件C、I…

深度学习基础实战使用MNIST数据集对图片分类

本文代码完全借鉴pytorch中文手册 我们找到数据集&#xff0c;对数据做预处理&#xff0c;定义我们的模型&#xff0c;调整超参数&#xff0c;测试训练&#xff0c;再通过训练结果对超参数进行调整或者对模型进行调整。 import torch import torch.nn as nn import torch.nn.f…

Linux 命令之 curl -- 文件传输工具/下载工具/网络接口调试

文章目录 一、命令介绍二、常用选项三、wget 与 curl 对比四、命令示例(一)以 post 方式提交数据/以 post 方式传递请求参数(二)查看网页的源码内容(三)保存访问的网页源码内容(四)将服务器的回应保存成文件/将输出保存成文件(五)显示 http response 头信息,打印出服…

python cookie使用_Python使用cookielib模块操作cookie的实例教程

cookielib是一个自动处理cookies的模块&#xff0c;如果我们在使用爬虫等技术的时候需要保存cookie&#xff0c;那么cookielib会让你事半功倍&#xff01;他最常见的搭档模块就是python下的urllib和request。核心类1.Cookie该类实现了Netscape and RFC 2965 cookies定义的cooki…