blob: fba54402cd072326b3832e810c89214b6716a830 [file] [log] [blame]
<!DOCTYPE html>
<html lang="1.1" class="js csstransforms3d">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Hugo 0.81.0" />
<meta name="description" content="A set of micro-services for connecting millions of devices.">
<meta name="author" content="The Eclipse Hono Project">
<link rel="apple-touch-icon" sizes="180x180" href="/hono/docs/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="48x48" href="/hono/docs/favicon/favicon-48x48.png">
<link rel="icon" type="image/png" sizes="32x32" href="/hono/docs/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/hono/docs/favicon/favicon-16x16.png">
<link rel="manifest" href="/hono/docs/favicon/site.webmanifest">
<link rel="mask-icon" href="/hono/docs/favicon/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="/hono/docs/favicon/favicon.ico">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/hono/docs/favicon/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<title>Resource limits :: Eclipse Hono&trade; Vers.: 1.1</title>
<link href="/hono/docs/css/nucleus.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/fontawesome-all.min.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/hybrid.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/featherlight.min.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/perfect-scrollbar.min.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/auto-complete.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/atom-one-dark-reasonable.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/theme.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/hugo-theme.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/theme-hono.css?1626138733" rel="stylesheet">
<link href="/hono/docs/css/hono.css?1626138733" rel="stylesheet">
<script src="/hono/docs/js/jquery-3.3.1.min.js?1626138733"></script>
<style>
:root #header + #content > #left > #rlblock_left{
display:none !important;
}
:not(pre) > code + span.copy-to-clipboard {
display: none;
}
</style>
<link rel="stylesheet" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@EclipseHono">
<meta name="twitter:title" content="Resource limits :: Eclipse Hono&amp;trade; Vers.: 1.1">
<meta name="twitter:image" content="https://www.eclipse.org/hono/docs/images/twitter_image.png">
<meta name="twitter:description" content="A set of micro-services for connecting millions of devices.">
<meta property="og:title" content="Resource limits :: Eclipse Hono&amp;trade; Vers.: 1.1" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.eclipse.org/hono/docs/1.1/concepts/resource-limits//" />
<meta property="og:image" content="https://www.eclipse.org/hono/docs/images/twitter_image.png" />
</head>
<body class="" data-url="/hono/docs/1.1/concepts/resource-limits/">
<nav id="sidebar" class="">
<div id="header-wrapper">
<div id="header">
<a href="https://www.eclipse.org/hono/">
<img src="/hono/docs/images/HONO-Logo_Bild-Wort_quer-w-310x120px.svg" alt="Hono logo" class="logo-img">
</a>
</div>
<div class="searchbox">
<label for="search-by"><i class="fas fa-search"></i></label>
<input data-search-input id="search-by" type="search" placeholder="Search...">
<span data-search-clear=""><i class="fas fa-times"></i></span>
</div>
<script type="text/javascript" src="/hono/docs/js/lunr.min.js?1626138733"></script>
<script type="text/javascript" src="/hono/docs/js/auto-complete.js?1626138733"></script>
<script type="text/javascript">
var baseurl = "https:\/\/www.eclipse.org\/hono\/docs\/\/1.1";
</script>
<script type="text/javascript" src="/hono/docs/js/search.js?1626138733"></script>
</div>
<div class="highlightable">
<ul class="topics">
<li data-nav-id="/hono/docs/1.1/concepts/" title="Concepts" class="dd-item
parent
">
<a href="/hono/docs/1.1/concepts/">
<i class="far fa-lightbulb"></i> Concepts
</a>
<ul>
<li data-nav-id="/hono/docs/1.1/concepts/device-identity/" title="Device Identity" class="dd-item ">
<a href="/hono/docs/1.1/concepts/device-identity/">
Device Identity
</a>
</li>
<li data-nav-id="/hono/docs/1.1/concepts/tenancy/" title="Multi-Tenancy" class="dd-item ">
<a href="/hono/docs/1.1/concepts/tenancy/">
Multi-Tenancy
</a>
</li>
<li data-nav-id="/hono/docs/1.1/concepts/device-provisioning/" title="Device Provisioning" class="dd-item ">
<a href="/hono/docs/1.1/concepts/device-provisioning/">
Device Provisioning
</a>
</li>
<li data-nav-id="/hono/docs/1.1/concepts/connecting-devices/" title="Connecting Devices" class="dd-item ">
<a href="/hono/docs/1.1/concepts/connecting-devices/">
Connecting Devices
</a>
</li>
<li data-nav-id="/hono/docs/1.1/concepts/device-notifications/" title="Device Notifications" class="dd-item ">
<a href="/hono/docs/1.1/concepts/device-notifications/">
Device Notifications
</a>
</li>
<li data-nav-id="/hono/docs/1.1/concepts/command-and-control/" title="Command &amp; Control" class="dd-item ">
<a href="/hono/docs/1.1/concepts/command-and-control/">
Command &amp; Control
</a>
</li>
<li data-nav-id="/hono/docs/1.1/concepts/resource-limits/" title="Resource limits" class="dd-item active">
<a href="/hono/docs/1.1/concepts/resource-limits/">
Resource limits
</a>
</li>
<li data-nav-id="/hono/docs/1.1/concepts/connection-events/" title="Connection Events" class="dd-item ">
<a href="/hono/docs/1.1/concepts/connection-events/">
Connection Events
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.1/user-guide/" title="User Guide" class="dd-item
">
<a href="/hono/docs/1.1/user-guide/">
<i class="fas fa-book-reader"></i> User Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.1/user-guide/device-registry/" title="Device Registry" class="dd-item ">
<a href="/hono/docs/1.1/user-guide/device-registry/">
Device Registry
</a>
</li>
<li data-nav-id="/hono/docs/1.1/user-guide/http-adapter/" title="HTTP Adapter" class="dd-item ">
<a href="/hono/docs/1.1/user-guide/http-adapter/">
HTTP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.1/user-guide/mqtt-adapter/" title="MQTT Adapter" class="dd-item ">
<a href="/hono/docs/1.1/user-guide/mqtt-adapter/">
MQTT Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.1/user-guide/amqp-adapter/" title="AMQP Adapter" class="dd-item ">
<a href="/hono/docs/1.1/user-guide/amqp-adapter/">
AMQP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.1/user-guide/kura-adapter/" title="Kura Adapter" class="dd-item ">
<a href="/hono/docs/1.1/user-guide/kura-adapter/">
Kura Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.1/user-guide/sigfox-adapter/" title="Sigfox Adapter" class="dd-item ">
<a href="/hono/docs/1.1/user-guide/sigfox-adapter/">
Sigfox Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.1/user-guide/jmeter_load_tests/" title="Load Tests with JMeter" class="dd-item ">
<a href="/hono/docs/1.1/user-guide/jmeter_load_tests/">
Load Tests with JMeter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/" title="Admin Guide" class="dd-item
">
<a href="/hono/docs/1.1/admin-guide/">
<i class="fas fa-sliders-h"></i> Admin Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.1/admin-guide/common-config/" title="Common Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/common-config/">
Common Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/auth-server-config/" title="Auth Server Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/auth-server-config/">
Auth Server Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/device-registry-config/" title="Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/device-registry-config/">
Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/device-connection-config/" title="Configuring the Device Connection Service" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/device-connection-config/">
Device Connection Service Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/http-adapter-config/" title="HTTP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/http-adapter-config/">
HTTP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/amqp-adapter-config/" title="AMQP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/amqp-adapter-config/">
AMQP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/mqtt-adapter-config/" title="MQTT Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/mqtt-adapter-config/">
MQTT Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/kura-adapter-config/" title="Kura Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/kura-adapter-config/">
Kura Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/hono-client-configuration/" title="Hono Client Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/hono-client-configuration/">
Hono Client Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/amqp-network-config/" title="AMQP 1.0 Messaging Network Configuration" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/amqp-network-config/">
AMQP 1.0 Messaging Network Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/secure_communication/" title="Secure Communication" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/secure_communication/">
Secure Communication
</a>
</li>
<li data-nav-id="/hono/docs/1.1/admin-guide/monitoring-tracing-config/" title="Monitoring &amp; Tracing" class="dd-item ">
<a href="/hono/docs/1.1/admin-guide/monitoring-tracing-config/">
Monitoring &amp; Tracing
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.1/dev-guide/" title="Developer Guide" class="dd-item
">
<a href="/hono/docs/1.1/dev-guide/">
<i class="fas fa-tools"></i> Developer Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.1/dev-guide/building_hono/" title="Building from Source" class="dd-item ">
<a href="/hono/docs/1.1/dev-guide/building_hono/">
Building from Source
</a>
</li>
<li data-nav-id="/hono/docs/1.1/dev-guide/java_client_consumer/" title="Consuming Messages from Java" class="dd-item ">
<a href="/hono/docs/1.1/dev-guide/java_client_consumer/">
Consuming Messages from Java
</a>
</li>
<li data-nav-id="/hono/docs/1.1/dev-guide/custom_http_adapter/" title="Implement a Custom Hono HTTP Protocol Adapter" class="dd-item ">
<a href="/hono/docs/1.1/dev-guide/custom_http_adapter/">
Implement a Custom Hono HTTP Protocol Adapter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.1/api/" title="API" class="dd-item
">
<a href="/hono/docs/1.1/api/">
&nbsp;<i class='fas fa-plug'></i>&nbsp;API
</a>
<ul>
<li data-nav-id="/hono/docs/1.1/api/telemetry/" title="Telemetry API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/telemetry/">
Telemetry API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/event/" title="Event API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/event/">
Event API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/command-and-control/" title="Command &amp; Control API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/command-and-control/">
Command &amp; Control API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/tenant/" title="Tenant API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/tenant/">
Tenant API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/device-connection/" title="Device Connection API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/device-connection/">
Device Connection API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/device-registration/" title="Device Registration API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/device-registration/">
Device Registration API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/credentials/" title="Credentials API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/credentials/">
Credentials API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/authentication/" title="Authentication API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/authentication/">
Authentication API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/management/" title="Device Registry Management API Specification" class="dd-item ">
<a href="/hono/docs/1.1/api/management/">
Device Registry Management API
</a>
</li>
<li data-nav-id="/hono/docs/1.1/api/metrics/" title="Metrics" class="dd-item ">
<a href="/hono/docs/1.1/api/metrics/">
Metrics
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.1/deployment/" title="Deployment" class="dd-item
">
<a href="/hono/docs/1.1/deployment/">
<i class="fas fa-shipping-fast"></i> Deployment
</a>
<ul>
<li data-nav-id="/hono/docs/1.1/deployment/helm-based-deployment/" title="Helm based Deployment" class="dd-item ">
<a href="/hono/docs/1.1/deployment/helm-based-deployment/">
Helm based Deployment
</a>
</li>
<li data-nav-id="/hono/docs/1.1/deployment/openshift/" title="OpenShift / OKD" class="dd-item ">
<a href="/hono/docs/1.1/deployment/openshift/">
OpenShift / OKD
</a>
</li>
<li data-nav-id="/hono/docs/1.1/deployment/create-kubernetes-cluster/" title="Setting up a Kubernetes Cluster" class="dd-item ">
<a href="/hono/docs/1.1/deployment/create-kubernetes-cluster/">
Setting up a Kubernetes Cluster
</a>
</li>
<li data-nav-id="/hono/docs/1.1/deployment/resource-limitation/" title="Limiting Resource Usage" class="dd-item ">
<a href="/hono/docs/1.1/deployment/resource-limitation/">
Limiting Resource Usage
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.1/architecture/" title="Architecture" class="dd-item
">
<a href="/hono/docs/1.1/architecture/">
<i class="fas fa-landmark"></i> Architecture
</a>
<ul>
<li data-nav-id="/hono/docs/1.1/architecture/component-view/" title="Component View" class="dd-item ">
<a href="/hono/docs/1.1/architecture/component-view/">
Component View
</a>
</li>
<li data-nav-id="/hono/docs/1.1/architecture/auth/" title="Authentication/Authorization" class="dd-item ">
<a href="/hono/docs/1.1/architecture/auth/">
Authentication/Authorization
</a>
</li>
</ul>
</li>
</ul>
<section id="shortcuts">
<h3></h3>
<ul>
<li>
<a class="padding" href="https://www.eclipse.org/hono/" title="Hono&#39;s Homepage"><i class='fas fa-home'></i> Hono Home</a>
</li>
<li>
<a class="padding" href="https://www.eclipse.org/hono/getting-started/" title="Getting started with Eclipse Hono"><i class='fas fa-plane-departure'></i> Getting Started</a>
</li>
</ul>
</section>
<section id="prefooter">
<hr/>
<ul>
<li>
<div id="select-box-wrapper">
<div id="select-box">
<a class="padding">
Version:&nbsp;
<div class="select-style">
<select id="select-language" onchange="location = this.value;">
<option id="stable" value="https://www.eclipse.org/hono/docs/concepts/resource-limits/">stable (1.8)</option>
<option id="1.8" value="https://www.eclipse.org/hono/docs/1.8/concepts/resource-limits/">1.8</option>
<option id="1.7" value="https://www.eclipse.org/hono/docs/1.7/concepts/resource-limits/">1.7</option>
<option id="1.6" value="https://www.eclipse.org/hono/docs/1.6/concepts/resource-limits/">1.6</option>
<option id="1.5" value="https://www.eclipse.org/hono/docs/1.5/concepts/resource-limits/">1.5</option>
<option id="1.4" value="https://www.eclipse.org/hono/docs/1.4/concepts/resource-limits/">1.4</option>
<option id="1.3" value="https://www.eclipse.org/hono/docs/1.3/concepts/resource-limits/">1.3</option>
<option id="1.2" value="https://www.eclipse.org/hono/docs/1.2/concepts/resource-limits/">1.2</option>
<option id="1.1" value="https://www.eclipse.org/hono/docs/1.1/concepts/resource-limits/" selected>1.1</option>
<option id="1.0" value="https://www.eclipse.org/hono/docs/1.0/concepts/resource-limits/">1.0</option>
<option id="dev" value="https://www.eclipse.org/hono/docs/dev/concepts/resource-limits/">dev</option>
</select>
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="255px" height="255px" viewBox="0 0 255 255" style="enable-background:new 0 0 255 255;" xml:space="preserve">
<g>
<g id="arrow-drop-down">
<polygon points="0,63.75 127.5,191.25 255,63.75 " />
</g>
</g>
</svg>
</div>
</a>
</div>
</div>
</li>
</ul>
</section>
<section id="footer">
<p>&copy; 2021 <a href="https://www.eclipse.org/hono/">The Eclipse Hono Project</a></p>
<p>
Documentation built with
<a href="https://gohugo.io/" target="_blank">Hugo</a>
using the
<a href="https://github.com/matcornic/hugo-theme-learn" target="_blank">Learn</a> theme.
</p>
<div class="eclipse-logo">
<a href="https://www.eclipse.org" target="_blank">
<img src="https://www.eclipse.org/hono/docs/images/eclipse_foundation_logo.svg"/>
</a>
</div>
</section>
</div>
</nav>
<section id="body">
<div id="overlay"></div>
<div class="old-version-hint">
<p>This page refers to version <em>1.1</em>.
You might want to use the <a href="https://www.eclipse.org/hono/docs/">current stable</a> version.
</p>
</div>
<div class="padding highlightable">
<div>
<div id="top-bar">
<div id="top-github-link">
<a class="github-link" title='Edit this page' href="https://github.com/eclipse/hono/edit/master/site/documentation/content/concepts/resource-limits.md" target="blank">
<i class="fas fa-code-branch"></i>
<span id="top-github-link-text">Edit this page</span>
</a>
</div>
<div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<span id="sidebar-toggle-span">
<a href="#" id="sidebar-toggle" data-sidebar-toggle="">
<i class="fas fa-bars"></i>
</a>
</span>
<span id="toc-menu"><i class="fas fa-list-alt"></i></span>
<span class="links">
<a href='/hono/docs/1.1/'>Documentation</a> > <a href='/hono/docs/1.1/concepts/'>Concepts</a> > Resource limits
</span>
</div>
<div class="progress">
<div class="wrapper">
<nav id="TableOfContents">
<ul>
<li><a href="#connections-limit">Connections Limit</a></li>
<li><a href="#connection-duration-limit">Connection Duration Limit</a></li>
<li><a href="#messages-limit">Messages Limit</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="head-tags">
</div>
<div id="body-inner">
<h1>
Resource limits
</h1>
<p>Resource limits such as the maximum number of device connections allowed per tenant or the allowed data volume of the messages over a period of time per tenant can be set in Hono.</p>
<p>Hono specifies an API <code>ResourceLimitChecks</code> that is used by the protocol adapters for the verification of the configured resource limits. A default implementation of this API is shipped with Hono. This default implementation uses the live metrics data retrieved from a Prometheus server to verify the resource-limits, if configured. To enable and use this default implementation, please refer to the protocol adapter admin guides. Based on the requirements, a custom version of the above API can be implemented and used. The resource-limits for a tenant can be set using the tenant configuration. Please refer to the <a href="/hono/docs/1.1/api/tenant/#tenant-information-format">Tenant API</a> for more details.</p>
<h2 id="connections-limit">Connections Limit</h2>
<p>Before accepting a new connection request from a device, the number of existing connections is checked against the configured limit by the protocol adapters. The connection request is declined if the limit is exceeded.</p>
<p>The MQTT and AMQP protocol adapters keep the connections longer opened than their counterparts such as HTTP. Thereby the MQTT and AMQP adapters are enabled to check the connection limits before accepting any new connection to a device.</p>
<h2 id="connection-duration-limit">Connection Duration Limit</h2>
<p>Before accepting a new connection request from a device, the overall amount of time that the devices have already been connected to protocol adapters for that tenant is checked against the configured limit by the protocol adapters. The connection request is declined if the connection duration limit has been already reached. This limit is only supported by protocol adapters that maintain <em>connection state</em> with authenticated devices. In particular, the HTTP adapter does not support this metric.</p>
<p>The default Prometheus based implementation uses connection duration as the factor to limit the connections. This default implementation supports two modes of connection duration limit calculation namely <code>days</code> and <code>monthly</code>. For more details on how to set the mode refer to the <a href="/hono/docs/1.1/api/tenant/#resource-limits-period-configuration-format">Tenant API</a>. If the period is not set explicitly, then the mode is assumed as <em>monthly</em> in the default implementation.</p>
<p>In the <code>monthly</code> mode, further device connections are only allowed, if the overall amount of time that the devices have already been connected from the beginning till the end of the current (Gregorian) calendar month does not exceed the configured <em>max-minutes</em> value. But for the first month, on which the connection duration limit became effective, the <em>effective connection duration limit</em> is calculated based on the <em>max-minutes</em> with respect to the remaining days in that month from the <em>effective-since</em> date.</p>
<p>Below is a sample resource limit configuration for a tenant, where it has been defined that the connection duration limit became effective on 10.Jul.2019 and the maximum connection duration limit for every month is 50,000 minutes. It means that from August 2019, the connection limit check ensures that no more connections are allowed for that tenant, if that limit of 50,000 minutes is already reached. But in case of July 2019, the month on which the message limit became effective, the <em>effective connection duration limit</em> is calculated by finding the average limit for a day from the configured <em>max-minutes</em> and then multiplying it with the number of days from the <em>effective-since</em> date till the end of that month. In this case it is calculated as <em>(50,000 minutes / 31 days) x 22 days</em>, which is 35,483 minutes. It means that for the month of July 2019, no more new connections are allowed, if the limit of 35,843 minutes is already reached.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json"><span style="color:#e6db74">&#34;resource-limits&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> {
<span style="color:#f92672">&#34;connection-duration&#34;</span>: {
<span style="color:#f92672">&#34;effective-since&#34;</span>: <span style="color:#e6db74">&#34;2019-07-10T14:30:00Z&#34;</span>,
<span style="color:#f92672">&#34;max-minutes&#34;</span>: <span style="color:#ae81ff">50000</span>,
<span style="color:#f92672">&#34;period&#34;</span>: {
<span style="color:#f92672">&#34;mode&#34;</span>: <span style="color:#e6db74">&#34;monthly&#34;</span>
}
}
}
</code></pre></div><p>In the <code>days</code> mode, further device connections are only allowed, if the overall amount of time that the devices have already been connected for the configured <em>no-of-days</em> does not exceed the <em>max-minutes</em> value. In the below sample configuration, the mode is configured as <code>days</code> and the accounting duration as 30 days. In this case the connection duration limit check ensures that new connections are accepted, only if the connection duration usage for every 30 days from 10.Jul.2019 (<code>effective-since</code>) does not exceed the 50,000 minutes limit.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json"><span style="color:#e6db74">&#34;resource-limits&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> {
<span style="color:#f92672">&#34;connection-duration&#34;</span>: {
<span style="color:#f92672">&#34;effective-since&#34;</span>: <span style="color:#e6db74">&#34;2019-07-10T14:30:00Z&#34;</span>,
<span style="color:#f92672">&#34;max-minutes&#34;</span>: <span style="color:#ae81ff">50000</span>,
<span style="color:#f92672">&#34;period&#34;</span>: {
<span style="color:#f92672">&#34;mode&#34;</span>: <span style="color:#e6db74">&#34;days&#34;</span>,
<span style="color:#f92672">&#34;no-of-days&#34;</span>: <span style="color:#ae81ff">30</span>
}
}
}
</code></pre></div><h2 id="messages-limit">Messages Limit</h2>
<p>Hono supports limiting the number of messages that devices and north bound applications of a tenant can publish to Hono during a given time interval. Before accepting any telemetry or event or command messages from devices or north bound applications, it is checked by the protocol adapters that if the message limit is exceeded or not. The incoming message is discarded if the limit is exceeded.</p>
<p>The default Prometheus based implementation uses data volume as the factor to limit the messages. The data volume already consumed by a tenant over the given time interval is compared with the configured message limit before accepting any messages. The default implementation supports two modes of message limits calculation namely <code>days</code> and <code>monthly</code>. For more details on how to set the mode refer to the <a href="/hono/docs/1.1/api/tenant/#resource-limits-period-configuration-format">Tenant API</a>. If the period is not set explicitly, then the mode is assumed as <em>monthly</em> in the default implementation.</p>
<p>In the <code>monthly</code> mode, the message limit check ensures that the data usage from the beginning till the end of a (Gregorian) calendar month does not exceed the <em>max-bytes</em> value. But for the first month on which the message limit became effective, the <em>effective max-bytes</em> are calculated based on the <em>max-bytes</em> with respect to the remaining days in that month from the <em>effective-since</em> date.</p>
<p>Below is a sample resource limit configuration for a tenant and it has been defined that the message limit became effective on 10.Jul.2019 and the maximum bytes allowed for a month is 2 GB. It means that from August 2019, the message limit check ensures that the data usage in a month does not exceed 2 GB. But in case of July 2019, the month on which the message limit became effective, the <em>effective max-bytes</em> is calculated by finding the average limit for a day from the <em>max-bytes</em> and multiplying it with the number of days from the <em>effective-since</em> date till the end of that month. In this case it is calculated as <em>(2 GB / 31 days) x 22 days</em> which is 1.4 GB. It means that for the month of July 2019, the data usage should not exceed 1.4GB.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json"><span style="color:#e6db74">&#34;resource-limits&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> {
<span style="color:#f92672">&#34;data-volume&#34;</span>: {
<span style="color:#f92672">&#34;effective-since&#34;</span>: <span style="color:#e6db74">&#34;2019-07-10T14:30:00Z&#34;</span>,
<span style="color:#f92672">&#34;max-bytes&#34;</span>: <span style="color:#ae81ff">2147483648</span>,
<span style="color:#f92672">&#34;period&#34;</span>: {
<span style="color:#f92672">&#34;mode&#34;</span>: <span style="color:#e6db74">&#34;monthly&#34;</span>
}
}
}
</code></pre></div><p>In the <code>days</code> mode, the message limit check ensures that the data usage for the defined <em>no-of-days</em> does not exceed the <em>max-bytes</em> value. In the below sample configuration, the mode is configured as <code>days</code> and the accounting duration as 30 days. In this case the message limit check ensures that the data usage for every 30 days from 10.Jul.2019 (<code>effective-since</code>) does not exceed the 2GB limit.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json"><span style="color:#e6db74">&#34;resource-limits&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> {
<span style="color:#f92672">&#34;data-volume&#34;</span>: {
<span style="color:#f92672">&#34;effective-since&#34;</span>: <span style="color:#e6db74">&#34;2019-07-10T14:30:00Z&#34;</span>,
<span style="color:#f92672">&#34;max-bytes&#34;</span>: <span style="color:#ae81ff">2147483648</span>,
<span style="color:#f92672">&#34;period&#34;</span>: {
<span style="color:#f92672">&#34;mode&#34;</span>: <span style="color:#e6db74">&#34;days&#34;</span>,
<span style="color:#f92672">&#34;no-of-days&#34;</span>: <span style="color:#ae81ff">30</span>
}
}
}
</code></pre></div>
<footer class="footline">
</footer>
</div>
</div>
<div id="navigation">
</div>
</section>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="/hono/docs/js/clipboard.min.js?1626138735"></script>
<script src="/hono/docs/js/perfect-scrollbar.min.js?1626138735"></script>
<script src="/hono/docs/js/perfect-scrollbar.jquery.min.js?1626138735"></script>
<script src="/hono/docs/js/jquery.sticky.js?1626138735"></script>
<script src="/hono/docs/js/featherlight.min.js?1626138735"></script>
<script src="/hono/docs/js/highlight.pack.js?1626138735"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="/hono/docs/js/modernizr.custom-3.6.0.js?1626138735"></script>
<script src="/hono/docs/js/learn.js?1626138735"></script>
<script src="/hono/docs/js/hugo-learn.js?1626138735"></script>
<link href="/hono/docs/mermaid/mermaid.css?1626138735" rel="stylesheet" />
<script src="/hono/docs/mermaid/mermaid.js?1626138735"></script>
<script>
mermaid.initialize({ startOnLoad: true });
</script>
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5WLCZXC');
</script>
<script src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>
</body>
</html>