blob: 0128cd436b4e7a719cafdd5cf71d5814a0c6ba07 [file] [log] [blame]
<!DOCTYPE html>
<html lang="1.5" 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>Configuring the Command Router Service :: Eclipse Hono&trade; Vers.: 1.5</title>
<link href="/hono/docs/css/nucleus.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/fontawesome-all.min.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/hybrid.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/featherlight.min.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/perfect-scrollbar.min.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/auto-complete.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/atom-one-dark-reasonable.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/theme.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/hugo-theme.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/theme-hono.css?1626138724" rel="stylesheet">
<link href="/hono/docs/css/hono.css?1626138724" rel="stylesheet">
<script src="/hono/docs/js/jquery-3.3.1.min.js?1626138724"></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="Configuring the Command Router Service :: Eclipse Hono&amp;trade; Vers.: 1.5">
<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="Configuring the Command Router Service :: Eclipse Hono&amp;trade; Vers.: 1.5" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.eclipse.org/hono/docs/1.5/admin-guide/command-router-config//" />
<meta property="og:image" content="https://www.eclipse.org/hono/docs/images/twitter_image.png" />
</head>
<body class="" data-url="/hono/docs/1.5/admin-guide/command-router-config/">
<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?1626138724"></script>
<script type="text/javascript" src="/hono/docs/js/auto-complete.js?1626138724"></script>
<script type="text/javascript">
var baseurl = "https:\/\/www.eclipse.org\/hono\/docs\/\/1.5";
</script>
<script type="text/javascript" src="/hono/docs/js/search.js?1626138724"></script>
</div>
<div class="highlightable">
<ul class="topics">
<li data-nav-id="/hono/docs/1.5/concepts/" title="Concepts" class="dd-item
">
<a href="/hono/docs/1.5/concepts/">
<i class="far fa-lightbulb"></i> Concepts
</a>
<ul>
<li data-nav-id="/hono/docs/1.5/concepts/device-identity/" title="Device Identity" class="dd-item ">
<a href="/hono/docs/1.5/concepts/device-identity/">
Device Identity
</a>
</li>
<li data-nav-id="/hono/docs/1.5/concepts/tenancy/" title="Multi-Tenancy" class="dd-item ">
<a href="/hono/docs/1.5/concepts/tenancy/">
Multi-Tenancy
</a>
</li>
<li data-nav-id="/hono/docs/1.5/concepts/device-provisioning/" title="Device Provisioning" class="dd-item ">
<a href="/hono/docs/1.5/concepts/device-provisioning/">
Device Provisioning
</a>
</li>
<li data-nav-id="/hono/docs/1.5/concepts/connecting-devices/" title="Connecting Devices" class="dd-item ">
<a href="/hono/docs/1.5/concepts/connecting-devices/">
Connecting Devices
</a>
</li>
<li data-nav-id="/hono/docs/1.5/concepts/device-notifications/" title="Device Notifications" class="dd-item ">
<a href="/hono/docs/1.5/concepts/device-notifications/">
Device Notifications
</a>
</li>
<li data-nav-id="/hono/docs/1.5/concepts/command-and-control/" title="Command &amp; Control" class="dd-item ">
<a href="/hono/docs/1.5/concepts/command-and-control/">
Command &amp; Control
</a>
</li>
<li data-nav-id="/hono/docs/1.5/concepts/resource-limits/" title="Resource limits" class="dd-item ">
<a href="/hono/docs/1.5/concepts/resource-limits/">
Resource limits
</a>
</li>
<li data-nav-id="/hono/docs/1.5/concepts/connection-events/" title="Connection Events" class="dd-item ">
<a href="/hono/docs/1.5/concepts/connection-events/">
Connection Events
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/" title="User Guide" class="dd-item
">
<a href="/hono/docs/1.5/user-guide/">
<i class="fas fa-book-reader"></i> User Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.5/user-guide/mongodb-based-device-registry/" title="MongoDB Based Device Registry" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/mongodb-based-device-registry/">
MongoDB Based Device Registry
</a>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/file-based-device-registry/" title="File Based Device Registry" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/file-based-device-registry/">
File Based Device Registry
</a>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/http-adapter/" title="HTTP Adapter" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/http-adapter/">
HTTP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/mqtt-adapter/" title="MQTT Adapter" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/mqtt-adapter/">
MQTT Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/amqp-adapter/" title="AMQP Adapter" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/amqp-adapter/">
AMQP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/coap-adapter/" title="CoAP Adapter" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/coap-adapter/">
CoAP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/kura-adapter/" title="Kura Adapter" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/kura-adapter/">
Kura Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.5/user-guide/sigfox-adapter/" title="Sigfox Adapter" class="dd-item ">
<a href="/hono/docs/1.5/user-guide/sigfox-adapter/">
Sigfox Adapter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/" title="Admin Guide" class="dd-item
parent
">
<a href="/hono/docs/1.5/admin-guide/">
<i class="fas fa-sliders-h"></i> Admin Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.5/admin-guide/common-config/" title="Common Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/common-config/">
Common Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/auth-server-config/" title="Auth Server Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/auth-server-config/">
Auth Server Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/jdbc-device-registry-config/" title="JDBC Based Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/jdbc-device-registry-config/">
JDBC Based Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/mongodb-device-registry-config/" title="MongoDB Based Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/mongodb-device-registry-config/">
MongoDB Based Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/file-based-device-registry-config/" title="File Based Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/file-based-device-registry-config/">
File Based Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/command-router-config/" title="Configuring the Command Router Service" class="dd-item active">
<a href="/hono/docs/1.5/admin-guide/command-router-config/">
Command Router Service Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/device-connection-config/" title="Configuring the Device Connection Service" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/device-connection-config/">
Device Connection Service Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/http-adapter-config/" title="HTTP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/http-adapter-config/">
HTTP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/mqtt-adapter-config/" title="MQTT Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/mqtt-adapter-config/">
MQTT Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/amqp-adapter-config/" title="AMQP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/amqp-adapter-config/">
AMQP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/coap-adapter-config/" title="CoAP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/coap-adapter-config/">
CoAP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/kura-adapter-config/" title="Kura Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/kura-adapter-config/">
Kura Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/hono-client-configuration/" title="Hono Client Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/hono-client-configuration/">
Hono Client Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/amqp-network-config/" title="AMQP 1.0 Messaging Network Configuration" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/amqp-network-config/">
AMQP 1.0 Messaging Network Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/secure_communication/" title="Secure Communication" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/secure_communication/">
Secure Communication
</a>
</li>
<li data-nav-id="/hono/docs/1.5/admin-guide/monitoring-tracing-config/" title="Monitoring &amp; Tracing" class="dd-item ">
<a href="/hono/docs/1.5/admin-guide/monitoring-tracing-config/">
Monitoring &amp; Tracing
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.5/dev-guide/" title="Developer Guide" class="dd-item
">
<a href="/hono/docs/1.5/dev-guide/">
<i class="fas fa-tools"></i> Developer Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.5/dev-guide/building_hono/" title="Building from Source" class="dd-item ">
<a href="/hono/docs/1.5/dev-guide/building_hono/">
Building from Source
</a>
</li>
<li data-nav-id="/hono/docs/1.5/dev-guide/amqp_adapter_client/" title="AMQP Adapter Client for Java" class="dd-item ">
<a href="/hono/docs/1.5/dev-guide/amqp_adapter_client/">
AMQP Adapter Client for Java
</a>
</li>
<li data-nav-id="/hono/docs/1.5/dev-guide/java_client_consumer/" title="Consuming Messages from Java" class="dd-item ">
<a href="/hono/docs/1.5/dev-guide/java_client_consumer/">
Consuming Messages from Java
</a>
</li>
<li data-nav-id="/hono/docs/1.5/dev-guide/custom_http_adapter/" title="Implement a Custom Hono HTTP Protocol Adapter" class="dd-item ">
<a href="/hono/docs/1.5/dev-guide/custom_http_adapter/">
Implement a Custom Hono HTTP Protocol Adapter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.5/api/" title="API" class="dd-item
">
<a href="/hono/docs/1.5/api/">
&nbsp;<i class='fas fa-plug'></i>&nbsp;API
</a>
<ul>
<li data-nav-id="/hono/docs/1.5/api/telemetry/" title="Telemetry API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/telemetry/">
Telemetry API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/event/" title="Event API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/event/">
Event API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/command-and-control/" title="Command &amp; Control API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/command-and-control/">
Command &amp; Control API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/tenant/" title="Tenant API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/tenant/">
Tenant API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/command-router/" title="Command Router API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/command-router/">
Command Router API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/device-connection/" title="Device Connection API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/device-connection/">
Device Connection API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/device-registration/" title="Device Registration API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/device-registration/">
Device Registration API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/credentials/" title="Credentials API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/credentials/">
Credentials API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/authentication/" title="Authentication API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/authentication/">
Authentication API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/management/" title="Device Registry Management API Specification" class="dd-item ">
<a href="/hono/docs/1.5/api/management/">
Device Registry Management API
</a>
</li>
<li data-nav-id="/hono/docs/1.5/api/metrics/" title="Metrics" class="dd-item ">
<a href="/hono/docs/1.5/api/metrics/">
Metrics
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.5/deployment/" title="Deployment" class="dd-item
">
<a href="/hono/docs/1.5/deployment/">
<i class="fas fa-shipping-fast"></i> Deployment
</a>
<ul>
<li data-nav-id="/hono/docs/1.5/deployment/helm-based-deployment/" title="Helm based Deployment" class="dd-item ">
<a href="/hono/docs/1.5/deployment/helm-based-deployment/">
Helm based Deployment
</a>
</li>
<li data-nav-id="/hono/docs/1.5/deployment/openshift/" title="OpenShift / OKD" class="dd-item ">
<a href="/hono/docs/1.5/deployment/openshift/">
OpenShift / OKD
</a>
</li>
<li data-nav-id="/hono/docs/1.5/deployment/create-kubernetes-cluster/" title="Setting up a Kubernetes Cluster" class="dd-item ">
<a href="/hono/docs/1.5/deployment/create-kubernetes-cluster/">
Setting up a Kubernetes Cluster
</a>
</li>
<li data-nav-id="/hono/docs/1.5/deployment/resource-limitation/" title="Limiting Resource Usage" class="dd-item ">
<a href="/hono/docs/1.5/deployment/resource-limitation/">
Limiting Resource Usage
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.5/architecture/" title="Architecture" class="dd-item
">
<a href="/hono/docs/1.5/architecture/">
<i class="fas fa-landmark"></i> Architecture
</a>
<ul>
<li data-nav-id="/hono/docs/1.5/architecture/component-view/" title="Component View" class="dd-item ">
<a href="/hono/docs/1.5/architecture/component-view/">
Component View
</a>
</li>
<li data-nav-id="/hono/docs/1.5/architecture/auth/" title="Authentication/Authorization" class="dd-item ">
<a href="/hono/docs/1.5/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/admin-guide/command-router-config/">stable (1.8)</option>
<option id="1.8" value="https://www.eclipse.org/hono/docs/1.8/admin-guide/command-router-config/">1.8</option>
<option id="1.7" value="https://www.eclipse.org/hono/docs/1.7/admin-guide/command-router-config/">1.7</option>
<option id="1.6" value="https://www.eclipse.org/hono/docs/1.6/admin-guide/command-router-config/">1.6</option>
<option id="1.5" value="https://www.eclipse.org/hono/docs/1.5/admin-guide/command-router-config/" selected>1.5</option>
<option id="dev" value="https://www.eclipse.org/hono/docs/dev/admin-guide/command-router-config/">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.5</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/admin-guide/command-router-config.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.5/'>Documentation</a> > <a href='/hono/docs/1.5/admin-guide/'>Admin Guide</a> > Configuring the Command Router Service
</span>
</div>
<div class="progress">
<div class="wrapper">
<nav id="TableOfContents">
<ul>
<li><a href="#service-configuration">Service Configuration</a></li>
<li><a href="#port-configuration">Port Configuration</a>
<ul>
<li><a href="#secure-port-only">Secure Port Only</a></li>
<li><a href="#insecure-port-only">Insecure Port Only</a></li>
<li><a href="#dual-port">Dual Port</a></li>
<li><a href="#ephemeral-ports">Ephemeral Ports</a></li>
</ul>
</li>
<li><a href="#command--control-connection-configuration">Command &amp; Control Connection Configuration</a></li>
<li><a href="#data-grid-connection-configuration">Data Grid Connection Configuration</a>
<ul>
<li><a href="#remote-cache">Remote cache</a></li>
<li><a href="#embedded-cache">Embedded cache</a></li>
</ul>
</li>
<li><a href="#authentication-service-connection-configuration">Authentication Service Connection Configuration</a></li>
<li><a href="#metrics-configuration">Metrics Configuration</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="head-tags">
</div>
<div id="body-inner">
<h1>
Configuring the Command Router Service
</h1>
<p>The Command Router service provides an implementation of Eclipse Honoâ„¢&rsquo;s <a href="/hono/docs/1.5/api/command-router/">Command Router API</a>.</p>
<p><em>Protocol Adapters</em> use the <em>Command Router API</em> to supply information with which a Command Router service component can route command &amp; control messages to the protocol adapters that the target devices are connected to.</p>
<div class="alert alert-notice">
<h4 class="alert-heading"><i class="fas fa-info-circle"></i> Tech preview</h4>
<div>This component is not considered production ready yet. It is meant as a replacement for the component implementing the <a href="/hono/docs/1.5/api/device-connection/">Device Connection API</a>.
It can be used by configuring the <a href="/hono/docs/1.5/admin-guide/common-config/#command-router-service-connection-configuration">Command Router service connection properties</a>, instead of the Device Connection service connection properties, in the protocol adapter.</div>
</div>
<p>The Command Router component provides an implementation of the Command Router API which uses a remote <em>data grid</em> for storing information about device connections. The data grid can be scaled out independently from the Command Router service components to meet the storage demands at hand.</p>
<p>The Command Router component is implemented as a Spring Boot application. It can be run either directly from the command line or by means of starting the corresponding <a href="https://hub.docker.com/r/eclipse/hono-service-command-router/">Docker image</a> created from it.</p>
<h2 id="service-configuration">Service Configuration</h2>
<p>In addition to the following options, this component supports the options described in <a href="/hono/docs/1.5/admin-guide/common-config/">Common Configuration</a>.</p>
<p>The following table provides an overview of the configuration variables and corresponding command line options for configuring the Command Router component.</p>
<table>
<thead>
<tr>
<th style="text-align:left">Environment Variable<br>Command Line Option</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Default</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>HONO_APP_MAX_INSTANCES</code><br><code>--hono.app.maxInstances</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><em>#CPU cores</em></td>
<td style="text-align:left">The number of Verticle instances to deploy. If not set, one Verticle per processor core is deployed.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_BIND_ADDRESS</code><br><code>--hono.commandRouter.amqp.bindAddress</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>127.0.0.1</code></td>
<td style="text-align:left">The IP address of the network interface that the secure AMQP port should be bound to.<br>See <a href="#port-configuration">Port Configuration</a> below for details.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_CERT_PATH</code><br><code>--hono.commandRouter.amqp.certPath</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The absolute path to the PEM file containing the certificate that the server should use for authenticating to clients. This option must be used in conjunction with <code>HONO_COMMANDROUTER_AMQP_KEY_PATH</code>.<br>Alternatively, the <code>HONO_COMMANDROUTER_AMQP_KEY_STORE_PATH</code> option can be used to configure a key store containing both the key as well as the certificate.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT</code><br><code>--hono.commandRouter.amqp.insecurePort</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The insecure port the server should listen on for AMQP 1.0 connections.<br>See <a href="#port-configuration">Port Configuration</a> below for details.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT_BIND_ADDRESS</code><br><code>--hono.commandRouter.amqp.insecurePortBindAddress</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>127.0.0.1</code></td>
<td style="text-align:left">The IP address of the network interface that the insecure AMQP port should be bound to.<br>See <a href="#port-configuration">Port Configuration</a> below for details.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT_ENABLED</code><br><code>--hono.commandRouter.amqp.insecurePortEnabled</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>false</code></td>
<td style="text-align:left">If set to <code>true</code> the server will open an insecure port (not secured by TLS) using either the port number set via <code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT</code> or the default AMQP port number (<code>5672</code>) if not set explicitly.<br>See <a href="#port-configuration">Port Configuration</a> below for details.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_KEY_PATH</code><br><code>--hono.commandRouter.amqp.keyPath</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The absolute path to the (PKCS8) PEM file containing the private key that the server should use for authenticating to clients. This option must be used in conjunction with <code>HONO_COMMANDROUTER_AMQP_CERT_PATH</code>. Alternatively, the <code>HONO_COMMANDROUTER_AMQP_KEY_STORE_PATH</code> option can be used to configure a key store containing both the key as well as the certificate.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_KEY_STORE_PASSWORD</code><br><code>--hono.commandRouter.amqp.keyStorePassword</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The password required to read the contents of the key store.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_KEY_STORE_PATH</code><br><code>--hono.commandRouter.amqp.keyStorePath</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The absolute path to the Java key store containing the private key and certificate that the server should use for authenticating to clients. Either this option or the <code>HONO_COMMANDROUTER_AMQP_KEY_PATH</code> and <code>HONO_COMMANDROUTER_AMQP_CERT_PATH</code> options need to be set in order to enable TLS secured connections with clients. The key store format can be either <code>JKS</code> or <code>PKCS12</code> indicated by a <code>.jks</code> or <code>.p12</code> file suffix respectively.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_NATIVE_TLS_REQUIRED</code><br><code>--hono.commandRouter.amqp.nativeTlsRequired</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>false</code></td>
<td style="text-align:left">The server will probe for OpenSLL on startup if a secure port is configured. By default, the server will fall back to the JVM&rsquo;s default SSL engine if not available. However, if set to <code>true</code>, the server will fail to start at all in this case.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_PORT</code><br><code>--hono.commandRouter.amqp.port</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>5671</code></td>
<td style="text-align:left">The secure port that the server should listen on for AMQP 1.0 connections.<br>See <a href="#port-configuration">Port Configuration</a> below for details.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_RECEIVER_LINK_CREDIT</code><br><code>--hono.commandRouter.amqp.receiverLinkCredit</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>100</code></td>
<td style="text-align:left">The number of credits to flow to a client connecting to the service&rsquo;s AMQP endpoint.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_AMQP_SECURE_PROTOCOLS</code><br><code>--hono.commandRouter.amqp.secureProtocols</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>TLSv1.2</code></td>
<td style="text-align:left">A (comma separated) list of secure protocols that are supported when negotiating TLS sessions. Please refer to the <a href="https://vertx.io/docs/vertx-core/java/#ssl">vert.x documentation</a> for a list of supported protocol names.</td>
</tr>
</tbody>
</table>
<p>The variables only need to be set if the default value does not match your environment.</p>
<h2 id="port-configuration">Port Configuration</h2>
<p>The Command Router component supports configuration of an AMQP based endpoint that can be configured to listen for connections on</p>
<ul>
<li>a secure port only (default) or</li>
<li>an insecure port only or</li>
<li>both a secure and an insecure port (dual port configuration)</li>
</ul>
<p>The server will fail to start if none of the ports is configured properly.</p>
<h3 id="secure-port-only">Secure Port Only</h3>
<p>The server needs to be configured with a private key and certificate in order to open a TLS secured port.</p>
<p>There are two alternative ways for doing so:</p>
<ol>
<li>Setting the <code>HONO_COMMANDROUTER_AMQP_KEY_STORE_PATH</code> and the <code>HONO_COMMANDROUTER_AMQP_KEY_STORE_PASSWORD</code> variables in order to load the key &amp; certificate from a password protected key store, or</li>
<li>setting the <code>HONO_COMMANDROUTER_AMQP_KEY_PATH</code> and <code>HONO_COMMANDROUTER_AMQP_CERT_PATH</code> variables in order to load the key and certificate from two separate PEM files in PKCS8 format.</li>
</ol>
<p>When starting up, the server will bind a TLS secured socket to the default secure AMQP port 5671. The port number can also be set explicitly using the <code>HONO_COMMANDROUTER_AMQP_PORT</code> variable.</p>
<p>The <code>HONO_COMMANDROUTER_AMQP_BIND_ADDRESS</code> variable can be used to specify the network interface that the port should be exposed on. By default the port is bound to the <em>loopback device</em> only, i.e. the port will only be accessible from the local host. Setting this variable to <code>0.0.0.0</code> will let the port being bound to <strong>all</strong> network interfaces (be careful not to expose the port unintentionally to the outside world).</p>
<h3 id="insecure-port-only">Insecure Port Only</h3>
<p>The secure port will mostly be required for production scenarios. However, it might be desirable to expose a non-TLS secured port instead, e.g. for testing purposes. In any case, the non-secure port needs to be explicitly enabled either by</p>
<ul>
<li>explicitly setting <code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT</code> to a valid port number, or by</li>
<li>implicitly configuring the default AMQP port (5672) by simply setting <code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT_ENABLED</code> to <code>true</code>.</li>
</ul>
<p>The server issues a warning on the console if <code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT</code> is set to the default secure AMQP port (5671).</p>
<p>The <code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT_BIND_ADDRESS</code> variable can be used to specify the network interface that the port should be exposed on. By default the port is bound to the <em>loopback device</em> only, i.e. the port will only be accessible from the local host. This variable might be used to e.g. expose the non-TLS secured port on a local interface only, thus providing easy access from within the local network, while still requiring encrypted communication when accessed from the outside over public network infrastructure.</p>
<p>Setting this variable to <code>0.0.0.0</code> will let the port being bound to <strong>all</strong> network interfaces (be careful not to expose the port unintentionally to the outside world).</p>
<h3 id="dual-port">Dual Port</h3>
<p>In test setups and some production scenarios Hono server may be configured to open one secure <strong>and</strong> one insecure port at the same time.</p>
<p>This is achieved by configuring both ports correctly (see above). The server will fail to start if both ports are configured to use the same port number.</p>
<p>Since the secure port may need different visibility in the network setup compared to the secure port, it has its own binding address <code>HONO_COMMANDROUTER_AMQP_INSECURE_PORT_BIND_ADDRESS</code>.
This can be used to narrow the visibility of the insecure port to a local network e.g., while the secure port may be visible worldwide.</p>
<h3 id="ephemeral-ports">Ephemeral Ports</h3>
<p>Both the secure as well as the insecure port numbers may be explicitly set to <code>0</code>. The Command Router component will then use arbitrary (unused) port numbers determined by the operating system during startup.</p>
<h2 id="command--control-connection-configuration">Command &amp; Control Connection Configuration</h2>
<p>The Command Router component requires a connection to the <em>AMQP 1.0 Messaging Network</em> in order to receive
commands from downstream applications and forward them on a specific link on which the target protocol adapter will receive them.</p>
<p>The connection is configured according to <a href="/hono/docs/1.5/admin-guide/hono-client-configuration/">Hono Client Configuration</a>
with <code>HONO_COMMAND</code> being used as <code>${PREFIX}</code>. The properties for configuring response caching can be ignored.</p>
<h2 id="data-grid-connection-configuration">Data Grid Connection Configuration</h2>
<p>The Command Router component requires either an embedded cache or a remote
data grid, using the Infinispan Hotrod protocol to store device information.</p>
<p>The following table provides an overview of the configuration variables and corresponding command line options for configuring the common aspects of the service:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Environment Variable<br>Command Line Option</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Default</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_COMMON_CACHENAME</code><br><code>--hono.commandRouter.cache.common.cacheName</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>command-router</code></td>
<td style="text-align:left">The name of the cache</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_COMMON_CHECKKEY</code><br><code>--hono.commandRouter.cache.common.checkKey</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>KEY_CONNECTION_CHECK</code></td>
<td style="text-align:left">The key used to check the health of the cache. This is only used in case of a remote cache.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_COMMON_CHECKVALUE</code><br><code>--hono.commandRouter.cache.common.checkValue</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><code>VALUE_CONNECTION_CHECK</code></td>
<td style="text-align:left">The value used to check the health of the cache. This is only used in case of a remote cache.</td>
</tr>
</tbody>
</table>
<p>The type of the cache is selected on startup by enabling or disabling the
profile <code>embedded-cache</code>. If the profile is enabled the embedded cache is
used, otherwise the remote cache is being used. The remote cache is the default.</p>
<h3 id="remote-cache">Remote cache</h3>
<p>The following table provides an overview of the configuration variables and corresponding command line options for configuring the connection to the data grid:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Environment Variable<br>Command Line Option</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Default</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_REMOTE_SERVERLIST</code><br><code>--hono.commandRouter.cache.remote.serverList</code></td>
<td style="text-align:center">yes</td>
<td style="text-align:left">-</td>
<td style="text-align:left">A list of remote servers in the form: <code>host1[:port][;host2[:port]]....</code>.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_REMOTE_AUTHSERVERNAME</code><br><code>--hono.commandRouter.cache.remote.authServerName</code></td>
<td style="text-align:center">yes</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The server name to indicate in the SASL handshake when authenticating to the server.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_REMOTE_AUTHREALM</code><br><code>--hono.commandRouter.cache.remote.authRealm</code></td>
<td style="text-align:center">yes</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The authentication realm for the SASL handshake when authenticating to the server.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_REMOTE_AUTHUSERNAME</code><br><code>--hono.commandRouter.cache.remote.authUsername</code></td>
<td style="text-align:center">yes</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The username to use for authenticating to the server.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_REMOTE_AUTHPASSWORD</code><br><code>--hono.commandRouter.cache.remote.authPassword</code></td>
<td style="text-align:center">yes</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The password to use for authenticating to the server.</td>
</tr>
</tbody>
</table>
<p>In general, the service supports all configuration properties of the <a href="https://docs.jboss.org/infinispan/10.1/apidocs/org/infinispan/client/hotrod/configuration/package-summary.html#package.description">Infinispan Hotrod client</a> using <code>hono.commandRouter.cache.remote</code> instead of the <code>infinispan.client.hotrod</code> prefix.</p>
<h3 id="embedded-cache">Embedded cache</h3>
<p>The following table provides an overview of the configuration variables and corresponding command line options for configuring the embedded cache:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Environment Variable<br>Command Line Option</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Default</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>HONO_COMMANDROUTER_CACHE_EMBEDDED_CONFIGURATIONFILE</code><br><code>--hono.commandRouter.cache.embedded.configurationFile</code></td>
<td style="text-align:center">yes</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The absolute path to an Infinispan configuration file. Also see the <a href="https://docs.jboss.org/infinispan/10.1/configdocs/">Infinispan Configuration Schema</a>.</td>
</tr>
</tbody>
</table>
<h2 id="authentication-service-connection-configuration">Authentication Service Connection Configuration</h2>
<p>The Command Router component requires a connection to an implementation of Hono&rsquo;s Authentication API in order to authenticate and authorize client requests.</p>
<p>The connection is configured according to <a href="/hono/docs/1.5/admin-guide/hono-client-configuration/">Hono Client Configuration</a>
where the <code>${PREFIX}</code> is set to <code>HONO_AUTH</code>. Since Hono&rsquo;s Authentication Service does not allow caching of the responses, the cache properties
can be ignored.</p>
<p>In addition to the standard client configuration properties, following properties need to be set for the connection:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Environment Variable<br>Command Line Option</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Default</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>HONO_AUTH_VALIDATION_CERT_PATH</code><br><code>--hono.auth.validation.certPath</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left">-</td>
<td style="text-align:left">The absolute path to the PEM file containing the public key that the service should use for validating tokens issued by the Authentication service. Alternatively, a symmetric key can be used for validating tokens by setting the <code>HONO_AUTH_VALIDATION_SHARED_SECRET</code> variable. If none of these variables is set, the service falls back to the key indicated by the <code>HONO_AUTH_CERT_PATH</code> variable. If that variable is also not set, startup of the service fails.</td>
</tr>
<tr>
<td style="text-align:left"><code>HONO_AUTH_VALIDATION_SHARED_SECRET</code><br><code>--hono.auth.validation.sharedSecret</code></td>
<td style="text-align:center">no</td>
<td style="text-align:left">-</td>
<td style="text-align:left">A string to derive a symmetric key from which is used for validating tokens issued by the Authentication service. The key is derived from the string by using the bytes of the String&rsquo;s UTF8 encoding. When setting the validation key using this variable, the Authentication service <strong>must</strong> be configured with the same key. Alternatively, an asymmetric key pair can be used for validating (and signing) by setting the <code>HONO_AUTH_SIGNING_CERT_PATH</code> variable. If none of these variables is set, startup of the service fails.</td>
</tr>
</tbody>
</table>
<h2 id="metrics-configuration">Metrics Configuration</h2>
<p>See <a href="/hono/docs/1.5/admin-guide/monitoring-tracing-config/">Monitoring &amp; Tracing Admin Guide</a> for details on how to configure the reporting of metrics.</p>
<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?1626138724"></script>
<script src="/hono/docs/js/perfect-scrollbar.min.js?1626138724"></script>
<script src="/hono/docs/js/perfect-scrollbar.jquery.min.js?1626138724"></script>
<script src="/hono/docs/js/jquery.sticky.js?1626138724"></script>
<script src="/hono/docs/js/featherlight.min.js?1626138724"></script>
<script src="/hono/docs/js/highlight.pack.js?1626138724"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="/hono/docs/js/modernizr.custom-3.6.0.js?1626138724"></script>
<script src="/hono/docs/js/learn.js?1626138724"></script>
<script src="/hono/docs/js/hugo-learn.js?1626138724"></script>
<link href="/hono/docs/mermaid/mermaid.css?1626138724" rel="stylesheet" />
<script src="/hono/docs/mermaid/mermaid.js?1626138724"></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>