1
0
mirror of https://github.com/taigrr/nats.docs synced 2025-01-18 04:03:23 -08:00
2019-09-27 16:14:03 -05:00

3644 lines
103 KiB
HTML

<!DOCTYPE HTML>
<html lang="" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Configuration file ยท NATS</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="The NATS Maintainers">
<link rel="stylesheet" href="../../gitbook/style.css">
<link rel="stylesheet" href="../../gitbook/gitbook-plugin-prism/prism.css">
<link rel="stylesheet" href="../../gitbook/gitbook-plugin-toggle-chapters/toggle.css">
<link rel="stylesheet" href="../../gitbook/gitbook-plugin-anchors/plugin.css">
<link rel="stylesheet" href="../../gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="../../gitbook/gitbook-plugin-fontsettings/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="../../gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="storelimits.html" />
<link rel="prev" href="cmdline.html" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/3.6.95/css/materialdesignicons.min.css">
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="Type to search" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../../">
<a href="../../">
Introduction
</a>
</li>
<li class="chapter " data-level="1.2" data-path="../../whats_new/whats_new_20.html">
<a href="../../whats_new/whats_new_20.html">
What's New in 2.0
</a>
</li>
<li class="chapter " data-level="1.3" data-path="../../faq.html">
<a href="../../faq.html">
FAQ
</a>
</li>
<li class="chapter " data-level="1.4" >
<a target="_blank" href="https://nats.io">
nats.io
</a>
</li>
<li class="header">Concepts</li>
<li class="chapter " data-level="2.1" data-path="../../developer/concepts/intro.html">
<a href="../../developer/concepts/intro.html">
What is NATS
</a>
</li>
<li class="chapter " data-level="2.2" data-path="../../developer/concepts/subjects.html">
<a href="../../developer/concepts/subjects.html">
Subject-Based Messaging
</a>
</li>
<li class="chapter " data-level="2.3" data-path="../../developer/concepts/pubsub.html">
<a href="../../developer/concepts/pubsub.html">
Publish-Subscribe
</a>
</li>
<li class="chapter " data-level="2.4" data-path="../../developer/concepts/reqreply.html">
<a href="../../developer/concepts/reqreply.html">
Request-Reply
</a>
</li>
<li class="chapter " data-level="2.5" data-path="../../developer/concepts/queue.html">
<a href="../../developer/concepts/queue.html">
Queue Groups
</a>
</li>
<li class="chapter " data-level="2.6" data-path="../../developer/concepts/acks.html">
<a href="../../developer/concepts/acks.html">
Acknowledgements
</a>
</li>
<li class="chapter " data-level="2.7" data-path="../../developer/concepts/seq_num.html">
<a href="../../developer/concepts/seq_num.html">
Sequence Numbers
</a>
</li>
<li class="header">Developing With NATS</li>
<li class="chapter " data-level="3.1" data-path="../../developer/">
<a href="../../developer/">
Introduction
</a>
</li>
<li class="chapter " data-level="3.2" data-path="../../developer/connecting/intro.html">
<a href="../../developer/connecting/intro.html">
Connecting
</a>
<ul class="articles">
<li class="chapter " data-level="3.2.1" data-path="../../developer/connecting/default_server.html">
<a href="../../developer/connecting/default_server.html">
Connecting to the Default Server
</a>
</li>
<li class="chapter " data-level="3.2.2" data-path="../../developer/connecting/specific_server.html">
<a href="../../developer/connecting/specific_server.html">
Connecting to a Specific Server
</a>
</li>
<li class="chapter " data-level="3.2.3" data-path="../../developer/connecting/cluster.html">
<a href="../../developer/connecting/cluster.html">
Connecting to a Cluster
</a>
</li>
<li class="chapter " data-level="3.2.4" data-path="../../developer/connecting/connect_timeout.html">
<a href="../../developer/connecting/connect_timeout.html">
Setting a Connect Timeout
</a>
</li>
<li class="chapter " data-level="3.2.5" data-path="../../developer/connecting/pingpong.html">
<a href="../../developer/connecting/pingpong.html">
Ping/Pong Protocol
</a>
</li>
<li class="chapter " data-level="3.2.6" data-path="../../developer/connecting/protocol.html">
<a href="../../developer/connecting/protocol.html">
Controlling the Client/Server Protocol
</a>
</li>
<li class="chapter " data-level="3.2.7" data-path="../../developer/connecting/noecho.html">
<a href="../../developer/connecting/noecho.html">
Turning Off Echo'd Messages
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="3.3" data-path="../../developer/reconnect/intro.html">
<a href="../../developer/reconnect/intro.html">
Automatic Reconnections
</a>
<ul class="articles">
<li class="chapter " data-level="3.3.1" data-path="../../developer/reconnect/disable.html">
<a href="../../developer/reconnect/disable.html">
Disabling Reconnect
</a>
</li>
<li class="chapter " data-level="3.3.2" data-path="../../developer/reconnect/max.html">
<a href="../../developer/reconnect/max.html">
Set the Number of Reconnect Attempts
</a>
</li>
<li class="chapter " data-level="3.3.3" data-path="../../developer/reconnect/wait.html">
<a href="../../developer/reconnect/wait.html">
Pausing Between Reconnect Attempts
</a>
</li>
<li class="chapter " data-level="3.3.4" data-path="../../developer/reconnect/random.html">
<a href="../../developer/reconnect/random.html">
Avoiding the Thundering Herd
</a>
</li>
<li class="chapter " data-level="3.3.5" data-path="../../developer/reconnect/events.html">
<a href="../../developer/reconnect/events.html">
Listening for Reconnect Events
</a>
</li>
<li class="chapter " data-level="3.3.6" data-path="../../developer/reconnect/buffer.html">
<a href="../../developer/reconnect/buffer.html">
Buffering Messages During Reconnect Attempts
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="3.4" data-path="../../developer/security/intro.html">
<a href="../../developer/security/intro.html">
Securing Connections
</a>
<ul class="articles">
<li class="chapter " data-level="3.4.1" data-path="../../developer/security/userpass.html">
<a href="../../developer/security/userpass.html">
Authenticating with a User and Password
</a>
</li>
<li class="chapter " data-level="3.4.2" data-path="../../developer/security/token.html">
<a href="../../developer/security/token.html">
Authenticating with a Token
</a>
</li>
<li class="chapter " data-level="3.4.3" data-path="../../developer/security/nkey.html">
<a href="../../developer/security/nkey.html">
Authenticating with an NKey
</a>
</li>
<li class="chapter " data-level="3.4.4" data-path="../../developer/security/creds.html">
<a href="../../developer/security/creds.html">
Authenticating with a Credentials File
</a>
</li>
<li class="chapter " data-level="3.4.5" data-path="../../developer/security/tls.html">
<a href="../../developer/security/tls.html">
Encrypting Connections with TLS
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="3.5" data-path="../../developer/receiving/intro.html">
<a href="../../developer/receiving/intro.html">
Receiving Messages
</a>
<ul class="articles">
<li class="chapter " data-level="3.5.1" data-path="../../developer/receiving/sync.html">
<a href="../../developer/receiving/sync.html">
Synchronous Subscriptions
</a>
</li>
<li class="chapter " data-level="3.5.2" data-path="../../developer/receiving/async.html">
<a href="../../developer/receiving/async.html">
Asynchronous Subscriptions
</a>
</li>
<li class="chapter " data-level="3.5.3" data-path="../../developer/receiving/unsubscribing.html">
<a href="../../developer/receiving/unsubscribing.html">
Unsubscribing
</a>
</li>
<li class="chapter " data-level="3.5.4" data-path="../../developer/receiving/unsub_after.html">
<a href="../../developer/receiving/unsub_after.html">
Unsubscribing After N Messages
</a>
</li>
<li class="chapter " data-level="3.5.5" data-path="../../developer/receiving/reply.html">
<a href="../../developer/receiving/reply.html">
Replying to a Message
</a>
</li>
<li class="chapter " data-level="3.5.6" data-path="../../developer/receiving/wildcards.html">
<a href="../../developer/receiving/wildcards.html">
Wildcard Subscriptions
</a>
</li>
<li class="chapter " data-level="3.5.7" data-path="../../developer/receiving/queues.html">
<a href="../../developer/receiving/queues.html">
Queue Subscriptions
</a>
</li>
<li class="chapter " data-level="3.5.8" data-path="../../developer/receiving/drain.html">
<a href="../../developer/receiving/drain.html">
Draining Messages Before Disconnect
</a>
</li>
<li class="chapter " data-level="3.5.9" data-path="../../developer/receiving/structure.html">
<a href="../../developer/receiving/structure.html">
Structured Data
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="3.6" data-path="../../developer/sending/intro.html">
<a href="../../developer/sending/intro.html">
Sending Messages
</a>
<ul class="articles">
<li class="chapter " data-level="3.6.1" data-path="../../developer/sending/replyto.html">
<a href="../../developer/sending/replyto.html">
Including a Reply Subject
</a>
</li>
<li class="chapter " data-level="3.6.2" data-path="../../developer/sending/request_reply.html">
<a href="../../developer/sending/request_reply.html">
Request-Reply Semantics
</a>
</li>
<li class="chapter " data-level="3.6.3" data-path="../../developer/sending/caches.html">
<a href="../../developer/sending/caches.html">
Caches, Flush and Ping
</a>
</li>
<li class="chapter " data-level="3.6.4" data-path="../../developer/sending/structure.html">
<a href="../../developer/sending/structure.html">
Sending Structured Data
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="3.7" data-path="../../developer/events/intro.html">
<a href="../../developer/events/intro.html">
Monitoring the Connection
</a>
<ul class="articles">
<li class="chapter " data-level="3.7.1" data-path="../../developer/events/events.html">
<a href="../../developer/events/events.html">
Listen for Connection Events
</a>
</li>
<li class="chapter " data-level="3.7.2" data-path="../../developer/events/slow.html">
<a href="../../developer/events/slow.html">
Slow Consumers
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="3.8" data-path="../../developer/tutorials/intro.html">
<a href="../../developer/tutorials/intro.html">
Tutorials
</a>
<ul class="articles">
<li class="chapter " data-level="3.8.1" data-path="../../developer/tutorials/pubsub.html">
<a href="../../developer/tutorials/pubsub.html">
Explore NATS Pub/Sub
</a>
</li>
<li class="chapter " data-level="3.8.2" data-path="../../developer/tutorials/reqreply.html">
<a href="../../developer/tutorials/reqreply.html">
Explore NATS Request/Reply
</a>
</li>
<li class="chapter " data-level="3.8.3" data-path="../../developer/tutorials/queues.html">
<a href="../../developer/tutorials/queues.html">
Explore NATS Queueing
</a>
</li>
<li class="chapter " data-level="3.8.4" data-path="../../developer/tutorials/custom_dialer.html">
<a href="../../developer/tutorials/custom_dialer.html">
Advanced Connect and Custom Dialer in Go
</a>
</li>
</ul>
</li>
<li class="header">NATS Server</li>
<li class="chapter " data-level="4.1" data-path="../../nats_server/installation.html">
<a href="../../nats_server/installation.html">
Installing
</a>
</li>
<li class="chapter " data-level="4.2" data-path="../../nats_server/running.html">
<a href="../../nats_server/running.html">
Running
</a>
<ul class="articles">
<li class="chapter " data-level="4.2.1" data-path="../../nats_server/windows_srv.html">
<a href="../../nats_server/windows_srv.html">
Window Service
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="4.3" data-path="../../nats_server/clients.html">
<a href="../../nats_server/clients.html">
Clients
</a>
</li>
<li class="chapter " data-level="4.4" data-path="../../nats_server/flags.html">
<a href="../../nats_server/flags.html">
Flags
</a>
</li>
<li class="chapter " data-level="4.5" data-path="../../nats_server/configuration.html">
<a href="../../nats_server/configuration.html">
Configuration
</a>
<ul class="articles">
<li class="chapter " data-level="4.5.1" data-path="../../nats_server/securing_nats.html">
<a href="../../nats_server/securing_nats.html">
Securing NATS
</a>
<ul class="articles">
<li class="chapter " data-level="4.5.1.1" data-path="../../nats_server/tls.html">
<a href="../../nats_server/tls.html">
Enabling TLS
</a>
</li>
<li class="chapter " data-level="4.5.1.2" data-path="../../nats_server/auth_intro.html">
<a href="../../nats_server/auth_intro.html">
Authentication
</a>
<ul class="articles">
<li class="chapter " data-level="4.5.1.2.1" data-path="../../nats_server/tokens.html">
<a href="../../nats_server/tokens.html">
Tokens
</a>
</li>
<li class="chapter " data-level="4.5.1.2.2" data-path="../../nats_server/username_password.html">
<a href="../../nats_server/username_password.html">
Username/Password
</a>
</li>
<li class="chapter " data-level="4.5.1.2.3" data-path="../../nats_server/tls_mutual_auth.html">
<a href="../../nats_server/tls_mutual_auth.html">
TLS Authentication
</a>
</li>
<li class="chapter " data-level="4.5.1.2.4" data-path="../../nats_server/nkey_auth.html">
<a href="../../nats_server/nkey_auth.html">
NKeys
</a>
</li>
<li class="chapter " data-level="4.5.1.2.5" data-path="../../nats_server/accounts.html">
<a href="../../nats_server/accounts.html">
Accounts
</a>
</li>
<li class="chapter " data-level="4.5.1.2.6" data-path="../../nats_server/jwt_auth.html">
<a href="../../nats_server/jwt_auth.html">
JWTs
</a>
</li>
<li class="chapter " data-level="4.5.1.2.7" data-path="../../nats_server/auth_timeout.html">
<a href="../../nats_server/auth_timeout.html">
Authentication Timeout
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="4.5.1.3" data-path="../../nats_server/authorization.html">
<a href="../../nats_server/authorization.html">
Authorization
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="4.5.2" data-path="../../nats_server/clustering.html">
<a href="../../nats_server/clustering.html">
Clustering
</a>
<ul class="articles">
<li class="chapter " data-level="4.5.2.1" data-path="../../nats_server/cluster_config.html">
<a href="../../nats_server/cluster_config.html">
Configuration
</a>
</li>
<li class="chapter " data-level="4.5.2.2" data-path="../../nats_server/cluster_tls.html">
<a href="../../nats_server/cluster_tls.html">
TLS Authentication
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="4.5.3" data-path="../../gateways/">
<a href="../../gateways/">
Gateways
</a>
<ul class="articles">
<li class="chapter " data-level="4.5.3.1" data-path="../../gateways/gateway.html">
<a href="../../gateways/gateway.html">
Configuration
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="4.5.4" data-path="../../leafnodes/">
<a href="../../leafnodes/">
Leaf Nodes
</a>
<ul class="articles">
<li class="chapter " data-level="4.5.4.1" data-path="../../leafnodes/leafnode_conf.html">
<a href="../../leafnodes/leafnode_conf.html">
Configuration
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="4.5.5" data-path="../../nats_server/logging.html">
<a href="../../nats_server/logging.html">
Logging
</a>
</li>
<li class="chapter " data-level="4.5.6" data-path="../../nats_server/monitoring.html">
<a href="../../nats_server/monitoring.html">
Monitoring
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="4.6" data-path="../../nats_admin/">
<a href="../../nats_admin/">
Managing A NATS Server
</a>
<ul class="articles">
<li class="chapter " data-level="4.6.1" data-path="../../nats_admin/upgrading_cluster.html">
<a href="../../nats_admin/upgrading_cluster.html">
Upgrading a Cluster
</a>
</li>
<li class="chapter " data-level="4.6.2" data-path="../../nats_admin/slow_consumers.html">
<a href="../../nats_admin/slow_consumers.html">
Slow Consumers
</a>
</li>
<li class="chapter " data-level="4.6.3" data-path="../../nats_admin/signals.html">
<a href="../../nats_admin/signals.html">
Signals
</a>
</li>
<li class="chapter " data-level="4.6.4" data-path="../../sys_accounts/">
<a href="../../sys_accounts/">
System Accounts
</a>
<ul class="articles">
<li class="chapter " data-level="4.6.4.1" data-path="../../sys_accounts/sys_accounts.html">
<a href="../../sys_accounts/sys_accounts.html">
Configuration
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="4.7" data-path="../../nats_docker/">
<a href="../../nats_docker/">
NATS and Docker
</a>
<ul class="articles">
<li class="chapter " data-level="4.7.1" data-path="../../nats_docker/nats-docker-tutorial.html">
<a href="../../nats_docker/nats-docker-tutorial.html">
Tutorial
</a>
</li>
<li class="chapter " data-level="4.7.2" data-path="../../nats_docker/docker_swarm.html">
<a href="../../nats_docker/docker_swarm.html">
Docker Swarm
</a>
</li>
</ul>
</li>
<li class="header">NATS Tools</li>
<li class="chapter " data-level="5.1" data-path="../../nats_tools/mkpasswd.html">
<a href="../../nats_tools/mkpasswd.html">
mkpasswd
</a>
</li>
<li class="chapter " data-level="5.2" data-path="../../nats_tools/nk.html">
<a href="../../nats_tools/nk.html">
nk
</a>
</li>
<li class="chapter " data-level="5.3" data-path="../../nats_tools/nsc/">
<a href="../../nats_tools/nsc/">
nsc
</a>
<ul class="articles">
<li class="chapter " data-level="5.3.1" data-path="../../nats_tools/nsc/nsc.html">
<a href="../../nats_tools/nsc/nsc.html">
Basics
</a>
</li>
<li class="chapter " data-level="5.3.2" data-path="../../nats_tools/nsc/streams.html">
<a href="../../nats_tools/nsc/streams.html">
Streams
</a>
</li>
<li class="chapter " data-level="5.3.3" data-path="../../nats_tools/nsc/services.html">
<a href="../../nats_tools/nsc/services.html">
Services
</a>
</li>
<li class="chapter " data-level="5.3.4" data-path="../../nats_tools/nsc/signing_keys.html">
<a href="../../nats_tools/nsc/signing_keys.html">
Signing Keys
</a>
</li>
<li class="chapter " data-level="5.3.5" data-path="../../nats_tools/nsc/revocation.html">
<a href="../../nats_tools/nsc/revocation.html">
Revocation
</a>
</li>
<li class="chapter " data-level="5.3.6" data-path="../../nats_tools/nsc/managed.html">
<a href="../../nats_tools/nsc/managed.html">
Managed Operators
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="5.4" data-path="../../nats_tools/nas/">
<a href="../../nats_tools/nas/">
nats-account-server
</a>
<ul class="articles">
<li class="chapter " data-level="5.4.1" data-path="../../nats_tools/nas/nas_conf.html">
<a href="../../nats_tools/nas/nas_conf.html">
Basics
</a>
</li>
<li class="chapter " data-level="5.4.2" data-path="../../nats_tools/nas/inspecting_jwts.html">
<a href="../../nats_tools/nas/inspecting_jwts.html">
Inspecting JWTs
</a>
</li>
<li class="chapter " data-level="5.4.3" data-path="../../nats_tools/nas/dir_store.html">
<a href="../../nats_tools/nas/dir_store.html">
Directory Store
</a>
</li>
<li class="chapter " data-level="5.4.4" data-path="../../nats_tools/nas/notifications.html">
<a href="../../nats_tools/nas/notifications.html">
Update Notifications
</a>
</li>
<li class="chapter " data-level="5.4.5" data-path="../../nats_tools/nas/mem_resolver.html">
<a href="../../nats_tools/nas/mem_resolver.html">
Memory Resolver
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="5.5" data-path="../../nats_tools/nats_top/">
<a href="../../nats_tools/nats_top/">
nats-top
</a>
<ul class="articles">
<li class="chapter " data-level="5.5.1" data-path="../../nats_tools/nats_top/nats-top-tutorial.html">
<a href="../../nats_tools/nats_top/nats-top-tutorial.html">
Tutorial
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="5.6" data-path="../../nats_tools/natsbench.html">
<a href="../../nats_tools/natsbench.html">
nats-bench
</a>
</li>
<li class="header">NATS Streaming Concepts</li>
<li class="chapter " data-level="6.1" data-path="../intro.html">
<a href="../intro.html">
Introduction
</a>
</li>
<li class="chapter " data-level="6.2" data-path="../relation-to-nats.html">
<a href="../relation-to-nats.html">
Relation to NATS
</a>
</li>
<li class="chapter " data-level="6.3" data-path="../client-connections.html">
<a href="../client-connections.html">
Client Connections
</a>
</li>
<li class="chapter " data-level="6.4" data-path="../channels/channels.html">
<a href="../channels/channels.html">
Channels
</a>
<ul class="articles">
<li class="chapter " data-level="6.4.1" data-path="../channels/message-log.html">
<a href="../channels/message-log.html">
Message Log
</a>
</li>
<li class="chapter " data-level="6.4.2" data-path="../channels/subscriptions/subscriptions.html">
<a href="../channels/subscriptions/subscriptions.html">
Subscriptions
</a>
<ul class="articles">
<li class="chapter " data-level="6.4.2.1" data-path="../channels/subscriptions/regular.html">
<a href="../channels/subscriptions/regular.html">
Regular
</a>
</li>
<li class="chapter " data-level="6.4.2.2" data-path="../channels/subscriptions/durable.html">
<a href="../channels/subscriptions/durable.html">
Durable
</a>
</li>
<li class="chapter " data-level="6.4.2.3" data-path="../channels/subscriptions/queue-group.html">
<a href="../channels/subscriptions/queue-group.html">
Queue Group
</a>
</li>
<li class="chapter " data-level="6.4.2.4" data-path="../channels/subscriptions/redelivery.html">
<a href="../channels/subscriptions/redelivery.html">
Redelivery
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="6.5" data-path="../store-interface.html">
<a href="../store-interface.html">
Store Interface
</a>
</li>
<li class="chapter " data-level="6.6" data-path="../store-encryption.html">
<a href="../store-encryption.html">
Store Encryption
</a>
</li>
<li class="chapter " data-level="6.7" data-path="../clustering/clustering.html">
<a href="../clustering/clustering.html">
Clustering
</a>
<ul class="articles">
<li class="chapter " data-level="6.7.1" data-path="../clustering/supported-stores.html">
<a href="../clustering/supported-stores.html">
Supported Stores
</a>
</li>
<li class="chapter " data-level="6.7.2" data-path="../clustering/configuration.html">
<a href="../clustering/configuration.html">
Configuration
</a>
</li>
<li class="chapter " data-level="6.7.3" data-path="../clustering/auto-configuration.html">
<a href="../clustering/auto-configuration.html">
Auto Configuration
</a>
</li>
<li class="chapter " data-level="6.7.4" data-path="../clustering/containers.html">
<a href="../clustering/containers.html">
Containers
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="6.8" data-path="../fault-tolerance/ft.html">
<a href="../fault-tolerance/ft.html">
Fault Tolerance
</a>
<ul class="articles">
<li class="chapter " data-level="6.8.1" data-path="../fault-tolerance/active-server.html">
<a href="../fault-tolerance/active-server.html">
Active Server
</a>
</li>
<li class="chapter " data-level="6.8.2" data-path="../fault-tolerance/standby-server.html">
<a href="../fault-tolerance/standby-server.html">
Standby Servers
</a>
</li>
<li class="chapter " data-level="6.8.3" data-path="../fault-tolerance/shared-state.html">
<a href="../fault-tolerance/shared-state.html">
Shared State
</a>
</li>
<li class="chapter " data-level="6.8.4" data-path="../fault-tolerance/failover.html">
<a href="../fault-tolerance/failover.html">
Failover
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="6.9" data-path="../partitioning.html">
<a href="../partitioning.html">
Partitioning
</a>
</li>
<li class="chapter " data-level="6.10" data-path="../monitoring/monitoring.html">
<a href="../monitoring/monitoring.html">
Monitoring
</a>
<ul class="articles">
<li class="chapter " data-level="6.10.1" data-path="../monitoring/endpoints.html">
<a href="../monitoring/endpoints.html">
Endpoints
</a>
</li>
</ul>
</li>
<li class="header">Developing With NATS Streaming</li>
<li class="chapter " data-level="7.1" data-path="../../developer/streaming/">
<a href="../../developer/streaming/">
Introduction
</a>
</li>
<li class="chapter " data-level="7.2" data-path="../../developer/streaming/connecting.html">
<a href="../../developer/streaming/connecting.html">
Connecting to NATS Streaming
</a>
</li>
<li class="chapter " data-level="7.3" data-path="../../developer/streaming/publishing.html">
<a href="../../developer/streaming/publishing.html">
Publishing to a Channel
</a>
</li>
<li class="chapter " data-level="7.4" data-path="../../developer/streaming/receiving.html">
<a href="../../developer/streaming/receiving.html">
Receiving Messages from a Channel
</a>
</li>
<li class="chapter " data-level="7.5" data-path="../../developer/streaming/durables.html">
<a href="../../developer/streaming/durables.html">
Durable Subscriptions
</a>
</li>
<li class="chapter " data-level="7.6" data-path="../../developer/streaming/queues.html">
<a href="../../developer/streaming/queues.html">
Queue Subscriptions
</a>
</li>
<li class="chapter " data-level="7.7" data-path="../../developer/streaming/acks.html">
<a href="../../developer/streaming/acks.html">
Acknowledgements
</a>
</li>
<li class="chapter " data-level="7.8" data-path="../../developer/streaming/protocol.html">
<a href="../../developer/streaming/protocol.html">
The Streaming Protocol
</a>
</li>
<li class="header">NATS Streaming Server</li>
<li class="chapter " data-level="8.1" data-path="../gettingstarted/changes.html">
<a href="../gettingstarted/changes.html">
Important Changes
</a>
</li>
<li class="chapter " data-level="8.2" data-path="../gettingstarted/install.html">
<a href="../gettingstarted/install.html">
Installing
</a>
</li>
<li class="chapter " data-level="8.3" data-path="../gettingstarted/run.html">
<a href="../gettingstarted/run.html">
Running
</a>
</li>
<li class="chapter " data-level="8.4" data-path="configuring.html">
<a href="configuring.html">
Configuring
</a>
<ul class="articles">
<li class="chapter " data-level="8.4.1" data-path="cmdline.html">
<a href="cmdline.html">
Command line arguments
</a>
</li>
<li class="chapter active" data-level="8.4.2" data-path="cfgfile.html">
<a href="cfgfile.html">
Configuration file
</a>
</li>
<li class="chapter " data-level="8.4.3" data-path="storelimits.html">
<a href="storelimits.html">
Store Limits
</a>
<ul class="articles">
<li class="chapter " data-level="8.4.3.1" data-path="storelimits.html">
<a href="storelimits.html#limits-inheritance">
Limits inheritance
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="8.4.4" data-path="persistence.html">
<a href="persistence.html">
Persistence
</a>
<ul class="articles">
<li class="chapter " data-level="8.4.4.1" data-path="filestore.html">
<a href="filestore.html">
File Store
</a>
<ul class="articles">
<li class="chapter " data-level="8.4.4.1.1" data-path="filestore.html">
<a href="filestore.html#options">
Options
</a>
</li>
<li class="chapter " data-level="8.4.4.1.2" data-path="filestore.html">
<a href="filestore.html#recovery-errors">
Recovery Errors
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="8.4.4.2" data-path="sqlstore.html">
<a href="sqlstore.html">
SQL Store
</a>
<ul class="articles">
<li class="chapter " data-level="8.4.4.2.1" data-path="sqlstore.html">
<a href="sqlstore.html#read-and-write-timeouts">
Read and Write Timeouts
</a>
</li>
<li class="chapter " data-level="8.4.4.2.2" data-path="sqlstore.html">
<a href="sqlstore.html#options">
Options
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="8.4.5" data-path="tls.html">
<a href="tls.html">
Securing
</a>
<ul class="articles">
<li class="chapter " data-level="8.4.5.1" data-path="tls.html">
<a href="tls.html#authenticating-users">
Authenticating Users
</a>
</li>
<li class="chapter " data-level="8.4.5.2" data-path="tls.html">
<a href="tls.html#using-tls">
TLS
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="chapter " data-level="8.5" data-path="../gettingstarted/process-signaling.html">
<a href="../gettingstarted/process-signaling.html">
Process Signaling
</a>
</li>
<li class="chapter " data-level="8.6" data-path="../gettingstarted/windows-service.html">
<a href="../gettingstarted/windows-service.html">
Windows Service
</a>
</li>
<li class="chapter " data-level="8.7" data-path="../../developer/streaming/embedding.html">
<a href="../../developer/streaming/embedding.html">
Embedding NATS Streaming Server
</a>
</li>
<li class="chapter " data-level="8.8" data-path="../swarm.html">
<a href="../swarm.html">
Docker Swarm
</a>
</li>
<li class="header">NATS Protocol</li>
<li class="chapter " data-level="9.1" data-path="../../nats_protocol/nats-protocol-demo.html">
<a href="../../nats_protocol/nats-protocol-demo.html">
Protocol Demo
</a>
</li>
<li class="chapter " data-level="9.2" data-path="../../nats_protocol/nats-protocol.html">
<a href="../../nats_protocol/nats-protocol.html">
Client Protocol
</a>
<ul class="articles">
<li class="chapter " data-level="9.2.1" data-path="../../nats_protocol/nats-client-dev.html">
<a href="../../nats_protocol/nats-client-dev.html">
Developing a Client
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="9.3" data-path="../../nats_protocol/nats-server-protocol.html">
<a href="../../nats_protocol/nats-server-protocol.html">
NATS Cluster Protocol
</a>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
Published with GitBook
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="../.." >Configuration file</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="configuration-file"><a name="configuration-file" class="plugin-anchor" href="#configuration-file"><i class="fa fa-link" aria-hidden="true"></i></a>Configuration File</h1>
<p>You can use a configuration file to configure the options specific to the NATS Streaming Server.</p>
<p>Use the <code>-sc</code> or <code>-stan_config</code> command line parameter to specify the file to use.</p>
<p>For the embedded NATS Server, you can use another configuration file and pass it to the Streaming Server using <code>-c</code> or <code>--config</code> command line parameters.</p>
<p>Since most options do not overlap, it is possible to combine all options into a single file and specify this file using either the <code>-sc</code> or <code>-c</code> command line parameter.</p>
<p>However, the option named <code>tls</code> is common to NATS Server and NATS Streaming Server. If you plan to use a single configuration file and configure TLS,
you should have all the streaming configuration included in a <code>streaming</code> map. This is actually a good practice regardless if you use TLS
or not, to protect against possible addition of new options in NATS Server that would conflict with the names of NATS Streaming options.</p>
<p>For instance, you could use a single configuration file with such content:</p>
<pre class="language-"><code># Some NATS Server TLS Configuration
listen: localhost:5222
tls: {
cert_file: &quot;/path/to/server/cert_file&quot;
key_file: &quot;/path/to/server/key_file&quot;
verify: true
timeout: 2
}
# NATS Streaming Configuration
streaming: {
cluster_id: my_cluster
tls: {
client_cert: &quot;/path/to/client/cert_file&quot;
client_key: &quot;/path/to/client/key_file&quot;
}
}
</code></pre><p>However, if you want to avoid any possible conflict, simply use two different configuration files.</p>
<p>Note the order in which options are applied during the start of a NATS Streaming server:</p>
<ol>
<li>Start with some reasonable default options.</li>
<li>If a configuration file is specified, override those options
with all options defined in the file. This includes options that are defined
but have no value specified. In this case, the zero value for the type of the
option will be used.</li>
<li>Any command line parameter override all of the previous set options.</li>
</ol>
<p>In general the configuration parameters are the same as the command line arguments. Below is the list of NATS Streaming parameters:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Parameter</th>
<th style="text-align:left">Meaning</th>
<th style="text-align:left">Possible Values</th>
<th style="text-align:left">Usage Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">cluster_id</td>
<td style="text-align:left">Cluster name</td>
<td style="text-align:left">String, underscore possible</td>
<td style="text-align:left"><code>cluster_id: &quot;my_cluster_name&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">discover_prefix</td>
<td style="text-align:left">Subject prefix for server discovery by clients</td>
<td style="text-align:left">NATS Subject</td>
<td style="text-align:left"><code>discover_prefix: &quot;_STAN.Discovery&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">store</td>
<td style="text-align:left">Store type</td>
<td style="text-align:left"><code>memory</code>, <code>file</code> or <code>sql</code></td>
<td style="text-align:left"><code>store: &quot;file&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">dir</td>
<td style="text-align:left">When using a file store, this is the root directory</td>
<td style="text-align:left">File path</td>
<td style="text-align:left"><code>dir: &quot;/path/to/storage</code></td>
</tr>
<tr>
<td style="text-align:left">sd</td>
<td style="text-align:left">Enable debug logging</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>sd: true</code></td>
</tr>
<tr>
<td style="text-align:left">sv</td>
<td style="text-align:left">Enable trace logging</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>sv: true</code></td>
</tr>
<tr>
<td style="text-align:left">nats_server_url</td>
<td style="text-align:left">If specified, connects to an external NATS Server, otherwise starts an embedded one</td>
<td style="text-align:left">NATS URL</td>
<td style="text-align:left"><code>nats_server_url: &quot;nats://localhost:4222&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">secure</td>
<td style="text-align:left">If true, creates a TLS connection to the server but without the need to use TLS configuration (no NATS Server certificate verification)</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>secure: true</code></td>
</tr>
<tr>
<td style="text-align:left">tls</td>
<td style="text-align:left">TLS Configuration</td>
<td style="text-align:left">Map: <code>tls: { ... }</code></td>
<td style="text-align:left"><a href="#tls-configuration"><strong>See details below</strong></a></td>
</tr>
<tr>
<td style="text-align:left">store_limits</td>
<td style="text-align:left">Store Limits</td>
<td style="text-align:left">Map: <code>store_limits: { ... }</code></td>
<td style="text-align:left"><a href="#store-limits-configuration"><strong>See details below</strong></a></td>
</tr>
<tr>
<td style="text-align:left">file_options</td>
<td style="text-align:left">File Store specific options</td>
<td style="text-align:left">Map: <code>file_options: { ... }</code></td>
<td style="text-align:left"><a href="#file-options-configuration"><strong>See details below</strong></a></td>
</tr>
<tr>
<td style="text-align:left">sql_options</td>
<td style="text-align:left">SQL Store specific options</td>
<td style="text-align:left">Map: <code>sql_options: { ... }</code></td>
<td style="text-align:left"><a href="#sql-options-configuration"><strong>See details below</strong></a></td>
</tr>
<tr>
<td style="text-align:left">hb_interval</td>
<td style="text-align:left">Interval at which the server sends an heartbeat to a client</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>hb_interval: &quot;10s&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">hb_timeout</td>
<td style="text-align:left">How long the server waits for a heartbeat response from the client before considering it a failed heartbeat</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>hb_timeout: &quot;10s&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">hb_fail_count</td>
<td style="text-align:left">Count of failed heartbeats before server closes the client connection. The actual total wait is: (fail count + 1) * (hb interval + hb timeout)</td>
<td style="text-align:left">Number</td>
<td style="text-align:left"><code>hb_fail_count: 2</code></td>
</tr>
<tr>
<td style="text-align:left">ft_group</td>
<td style="text-align:left">In Fault Tolerance mode, you can start a group of streaming servers with only one server being active while others are running in standby mode. This is the name of this FT group</td>
<td style="text-align:left">String</td>
<td style="text-align:left"><code>ft_group: &quot;my_ft_group&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">partitioning</td>
<td style="text-align:left">If set to true, a list of channels must be defined in store_limits/channels section. This section then serves two purposes, overriding limits for a given channel or adding it to the partition</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>partitioning: true</code></td>
</tr>
<tr>
<td style="text-align:left">cluster</td>
<td style="text-align:left">Cluster Configuration</td>
<td style="text-align:left">Map: <code>cluster: { ... }</code></td>
<td style="text-align:left"><a href="#cluster-configuration"><strong>See details below</strong></a></td>
</tr>
<tr>
<td style="text-align:left">encrypt</td>
<td style="text-align:left">Specify if server should encrypt messages (only the payload) when storing them</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>encrypt: true</code></td>
</tr>
<tr>
<td style="text-align:left">encryption_cipher</td>
<td style="text-align:left">Cipher to use for encryption. Currently support AES and CHAHA (ChaChaPoly). Defaults to AES</td>
<td style="text-align:left"><code>AES</code> or <code>CHACHA</code></td>
<td style="text-align:left"><code>encryption_cipher: &quot;AES&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">encryption_key</td>
<td style="text-align:left">Encryption key. It is recommended to specify the key through the <code>NATS_STREAMING_ENCRYPTION_KEY</code> environment variable instead</td>
<td style="text-align:left">String</td>
<td style="text-align:left"><code>encryption_key: &quot;mykey&quot;</code></td>
</tr>
</tbody>
</table>
<h2 id="tls-configuration"><a name="tls-configuration" class="plugin-anchor" href="#tls-configuration"><i class="fa fa-link" aria-hidden="true"></i></a>TLS Configuration</h2>
<p>Note that the Streaming Server uses a connection to a NATS Server, and so the NATS Streaming TLS Configuration
is in fact a client-side TLS configuration.</p>
<table>
<thead>
<tr>
<th style="text-align:left">Parameter</th>
<th style="text-align:left">Meaning</th>
<th style="text-align:left">Possible Values</th>
<th style="text-align:left">Usage Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">client_cert</td>
<td style="text-align:left">Client key for the streaming server</td>
<td style="text-align:left">File path</td>
<td style="text-align:left"><code>client_cert: &quot;/path/to/client/cert_file&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">client_key</td>
<td style="text-align:left">Client certificate for the streaming server</td>
<td style="text-align:left">File path</td>
<td style="text-align:left"><code>client_key: &quot;/path/to/client/key_file&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">client_ca</td>
<td style="text-align:left">Client certificate CA for the streaming server</td>
<td style="text-align:left">File path</td>
<td style="text-align:left"><code>client_ca: &quot;/path/to/client/ca_file&quot;</code></td>
</tr>
</tbody>
</table>
<h2 id="store-limits-configuration"><a name="store-limits-configuration" class="plugin-anchor" href="#store-limits-configuration"><i class="fa fa-link" aria-hidden="true"></i></a>Store Limits Configuration</h2>
<table>
<thead>
<tr>
<th style="text-align:left">Parameter</th>
<th style="text-align:left">Meaning</th>
<th style="text-align:left">Possible Values</th>
<th style="text-align:left">Usage Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">max_channels</td>
<td style="text-align:left">Maximum number of channels, 0 means unlimited</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>max_channels: 100</code></td>
</tr>
<tr>
<td style="text-align:left">max_subs</td>
<td style="text-align:left">Maximum number of subscriptions per channel, 0 means unlimited</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>max_subs: 100</code></td>
</tr>
<tr>
<td style="text-align:left">max_msgs</td>
<td style="text-align:left">Maximum number of messages per channel, 0 means unlimited</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>max_msgs: 10000</code></td>
</tr>
<tr>
<td style="text-align:left">max_bytes</td>
<td style="text-align:left">Total size of messages per channel, 0 means unlimited</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>max_bytes: 1GB</code></td>
</tr>
<tr>
<td style="text-align:left">max_age</td>
<td style="text-align:left">How long messages can stay in the log</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>max_age: &quot;24h&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">max_inactivity</td>
<td style="text-align:left">How long without any subscription and any new message before a channel can be automatically deleted</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>max_inactivity: &quot;24h&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">channels</td>
<td style="text-align:left">A map of channel names with specific limits</td>
<td style="text-align:left">Map: <code>channels: { ... }</code></td>
<td style="text-align:left"><a href="#channels"><strong>See details below</strong></a></td>
</tr>
</tbody>
</table>
<h2 id="channels"><a name="channels" class="plugin-anchor" href="#channels"><i class="fa fa-link" aria-hidden="true"></i></a>Channels</h2>
<p>The <code>channels</code> section is a map with the key being the channel name. For instance:</p>
<pre class="language-"><code> channels: {
&quot;foo&quot;: {
max_msgs: 100
}
}
</code></pre><p>For a given channel, the possible parameters are:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Parameter</th>
<th style="text-align:left">Meaning</th>
<th style="text-align:left">Possible Values</th>
<th style="text-align:left">Usage Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">max_subs</td>
<td style="text-align:left">Maximum number of subscriptions per channel, 0 means unlimited</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>max_subs: 100</code></td>
</tr>
<tr>
<td style="text-align:left">max_msgs</td>
<td style="text-align:left">Maximum number of messages per channel, 0 means unlimited</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>max_msgs: 10000</code></td>
</tr>
<tr>
<td style="text-align:left">max_bytes</td>
<td style="text-align:left">Total size of messages per channel, 0 means unlimited</td>
<td style="text-align:left">Bytes</td>
<td style="text-align:left"><code>max_bytes: 1GB</code></td>
</tr>
<tr>
<td style="text-align:left">max_age</td>
<td style="text-align:left">How long messages can stay in the log</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>max_age: &quot;24h&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">max_inactivity</td>
<td style="text-align:left">How long without any subscription and any new message before a channel can be automatically deleted</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>max_inactivity: &quot;24h&quot;</code></td>
</tr>
</tbody>
</table>
<h2 id="file-options-configuration"><a name="file-options-configuration" class="plugin-anchor" href="#file-options-configuration"><i class="fa fa-link" aria-hidden="true"></i></a>File Options Configuration</h2>
<table>
<thead>
<tr>
<th style="text-align:left">Parameter</th>
<th style="text-align:left">Meaning</th>
<th style="text-align:left">Possible Values</th>
<th style="text-align:left">Usage Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">compact</td>
<td style="text-align:left">Enable/disable file compaction. Only some of the files (<code>clients.dat</code> and <code>subs.dat</code>) are subject to compaction</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>compact: true</code></td>
</tr>
<tr>
<td style="text-align:left">compact_fragmentation</td>
<td style="text-align:left">Compaction threshold (in percentage)</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>compact_fragmentation: 50</code></td>
</tr>
<tr>
<td style="text-align:left">compact_interval</td>
<td style="text-align:left">Minimum interval between attempts to compact files</td>
<td style="text-align:left">Expressed in seconds</td>
<td style="text-align:left"><code>compact_interval: 300</code></td>
</tr>
<tr>
<td style="text-align:left">compact_min_size</td>
<td style="text-align:left">Minimum size of a file before compaction can be attempted</td>
<td style="text-align:left">Bytes</td>
<td style="text-align:left"><code>compact_min_size: 1GB</code></td>
</tr>
<tr>
<td style="text-align:left">buffer_size</td>
<td style="text-align:left">Size of buffers that can be used to buffer write operations</td>
<td style="text-align:left">Bytes</td>
<td style="text-align:left"><code>buffer_size: 2MB</code></td>
</tr>
<tr>
<td style="text-align:left">crc</td>
<td style="text-align:left">Define if CRC of records should be computed on reads</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>crc: true</code></td>
</tr>
<tr>
<td style="text-align:left">crc_poly</td>
<td style="text-align:left">You can select the CRC polynomial. Note that changing the value after records have been persisted would result in server failing to start complaining about data corruption</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>crc_poly: 3988292384</code></td>
</tr>
<tr>
<td style="text-align:left">sync_on_flush</td>
<td style="text-align:left">Define if server should perform &quot;file sync&quot; operations during a flush</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>sync_on_flush: true</code></td>
</tr>
<tr>
<td style="text-align:left">slice_max_msgs</td>
<td style="text-align:left">Define the file slice maximum number of messages. If set to 0 and a channel count limit is set, then the server will set a slice count limit automatically</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>slice_max_msgs: 10000</code></td>
</tr>
<tr>
<td style="text-align:left">slice_max_bytes</td>
<td style="text-align:left">Define the file slice maximum size (including the size of index file). If set to 0 and a channel size limit is set, then the server will set a slice bytes limit automatically</td>
<td style="text-align:left">Bytes</td>
<td style="text-align:left"><code>slice_max_bytes: 64MB</code></td>
</tr>
<tr>
<td style="text-align:left">slice_max_age</td>
<td style="text-align:left">Define the period of time covered by a file slice, starting at when the first message is stored. If set to 0 and a channel age limit is set, then the server will set a slice age limit automatically</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>slice_max_age: &quot;24h&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">slice_archive_script</td>
<td style="text-align:left">Define the location and name of a script to be invoked when the server discards a file slice due to limits. The script is invoked with the name of the channel, the name of data and index files. It is the responsibility of the script to then remove the unused files</td>
<td style="text-align:left">File path</td>
<td style="text-align:left"><code>slice_archive_script: &quot;/home/nats-streaming/archive/script.sh&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">file_descriptors_limit</td>
<td style="text-align:left">Channels translate to sub-directories under the file store&apos;s root directory. Each channel needs several files to maintain the state so the need for file descriptors increase with the number of channels. This option instructs the store to limit the concurrent use of file descriptors. Note that this is a soft limit and there may be cases when the store will use more than this number. A value of 0 means no limit. Setting a limit will probably have a performance impact</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>file_descriptors_limit: 100</code></td>
</tr>
<tr>
<td style="text-align:left">parallel_recovery</td>
<td style="text-align:left">When the server starts, the recovery of channels (directories) is done sequentially. However, when using SSDs, it may be worth setting this value to something higher than 1 to perform channels recovery in parallel</td>
<td style="text-align:left">Number &gt;= 1</td>
<td style="text-align:left"><code>parallel_recovery: 4</code></td>
</tr>
<tr>
<td style="text-align:left">read_buffer_size</td>
<td style="text-align:left">Size of buffers used to read ahead from message stores. This can significantly speed up sending messages to consumers after messages have been published. Default is 2MB. Set to 0 to disable</td>
<td style="text-align:left">Bytes</td>
<td style="text-align:left"><code>read_buffer_size: 2MB</code></td>
</tr>
<tr>
<td style="text-align:left">auto_sync</td>
<td style="text-align:left">Interval at which the store should be automatically flushed and sync&apos;ed on disk. Default is every minute. Set to &lt;=0 to disable</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>auto_sync: &quot;2m&quot;</code></td>
</tr>
</tbody>
</table>
<h2 id="cluster-configuration"><a name="cluster-configuration" class="plugin-anchor" href="#cluster-configuration"><i class="fa fa-link" aria-hidden="true"></i></a>Cluster Configuration</h2>
<table>
<thead>
<tr>
<th style="text-align:left">Parameter</th>
<th style="text-align:left">Meaning</th>
<th style="text-align:left">Possible Values</th>
<th style="text-align:left">Usage Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">node_id</td>
<td style="text-align:left">ID of the node within the cluster if there is no stored ID</td>
<td style="text-align:left">String (no whitespace)</td>
<td style="text-align:left"><code>node_id: &quot;node-a&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">bootstrap</td>
<td style="text-align:left">Bootstrap the cluster if there is no existing state by electing self as leader</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>bootstrap: true</code></td>
</tr>
<tr>
<td style="text-align:left">peers</td>
<td style="text-align:left">List of cluster peer node IDs to bootstrap cluster state</td>
<td style="text-align:left">List of node IDs</td>
<td style="text-align:left"><code>peers: [&quot;node-b&quot;, &quot;node-c&quot;]</code></td>
</tr>
<tr>
<td style="text-align:left">log_path</td>
<td style="text-align:left">Directory to store log replication data</td>
<td style="text-align:left">File path</td>
<td style="text-align:left"><code>log_path: &quot;/path/to/storage&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">log_cache_size</td>
<td style="text-align:left">Number of log entries to cache in memory to reduce disk IO</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>log_cache_size: 1024</code></td>
</tr>
<tr>
<td style="text-align:left">log_snapshots</td>
<td style="text-align:left">Number of log snapshots to retain</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>log_snapshots: 1</code></td>
</tr>
<tr>
<td style="text-align:left">trailing_logs</td>
<td style="text-align:left">Number of log entries to leave after a snapshot and compaction</td>
<td style="text-align:left">Number &gt;= 0</td>
<td style="text-align:left"><code>trailing_logs: 256</code></td>
</tr>
<tr>
<td style="text-align:left">sync</td>
<td style="text-align:left">Do a file sync after every write to the replication log and message store</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>sync: true</code></td>
</tr>
<tr>
<td style="text-align:left">raft_logging</td>
<td style="text-align:left">Enable logging from the Raft library (disabled by default)</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>raft_logging: true</code></td>
</tr>
<tr>
<td style="text-align:left">raft_heartbeat_timeout</td>
<td style="text-align:left">Specifies the time in follower state without a leader before attempting an election</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>raft_heartbeat_timeout: &quot;2s&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">raft_election_timeout</td>
<td style="text-align:left">Specifies the time in candidate state without a leader before attempting an election</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>raft_election_timeout: &quot;2s&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">raft_lease_timeout</td>
<td style="text-align:left">Specifies how long a leader waits without being able to contact a quorum of nodes before stepping down as leader</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>raft_lease_timeout: &quot;1s&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">raft_commit_timeout</td>
<td style="text-align:left">Specifies the time without an Apply() operation before sending an heartbeat to ensure timely commit. Due to random staggering, may be delayed as much as 2x this value</td>
<td style="text-align:left">Duration</td>
<td style="text-align:left"><code>raft_commit_timeout: &quot;100ms&quot;</code></td>
</tr>
</tbody>
</table>
<h2 id="sql-options-configuration"><a name="sql-options-configuration" class="plugin-anchor" href="#sql-options-configuration"><i class="fa fa-link" aria-hidden="true"></i></a>SQL Options Configuration</h2>
<table>
<thead>
<tr>
<th style="text-align:left">Parameter</th>
<th style="text-align:left">Meaning</th>
<th style="text-align:left">Possible Values</th>
<th style="text-align:left">Usage Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">driver</td>
<td style="text-align:left">Name of the SQL driver to use</td>
<td style="text-align:left"><code>mysql</code> or <code>postgres</code></td>
<td style="text-align:left"><code>driver: &quot;mysql&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">source</td>
<td style="text-align:left">How to connect to the database. This is driver specific</td>
<td style="text-align:left">String</td>
<td style="text-align:left"><code>source: &quot;ivan:pwd@/nss_db&quot;</code></td>
</tr>
<tr>
<td style="text-align:left">no_caching</td>
<td style="text-align:left">Enable/Disable caching for messages and subscriptions operations. The default is <code>false</code>, which means that caching is enabled</td>
<td style="text-align:left"><code>true</code> or <code>false</code></td>
<td style="text-align:left"><code>no_caching: false</code></td>
</tr>
<tr>
<td style="text-align:left">max_open_conns</td>
<td style="text-align:left">Maximum number of opened connections to the database. Value &lt;= 0 means no limit. The default is 0 (unlimited)</td>
<td style="text-align:left">Number</td>
<td style="text-align:left"><code>max_open_conns: 5</code></td>
</tr>
</tbody>
</table>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="cmdline.html" class="navigation navigation-prev " aria-label="Previous page: Command line arguments">
<i class="fa fa-angle-left"></i>
</a>
<a href="storelimits.html" class="navigation navigation-next " aria-label="Next page: Store Limits">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"Configuration file","level":"8.4.2","depth":2,"next":{"title":"Store Limits","level":"8.4.3","depth":2,"path":"nats_streaming/configuring/storelimits.md","ref":"nats_streaming/configuring/storelimits.md","articles":[{"title":"Limits inheritance","level":"8.4.3.1","depth":3,"anchor":"#limits-inheritance","path":"nats_streaming/configuring/storelimits.md","ref":"nats_streaming/configuring/storelimits.md#limits-inheritance","articles":[]}]},"previous":{"title":"Command line arguments","level":"8.4.1","depth":2,"path":"nats_streaming/configuring/cmdline.md","ref":"nats_streaming/configuring/cmdline.md","articles":[]},"dir":"ltr"},"config":{"plugins":["prism","-sharing","-highlight","include-html","toggle-chapters","anchors","edit-link"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"prism":{"lang":{"ascii":"markup","text":"markup"}},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"include-html":{},"fontsettings":{"theme":"white","family":"sans","size":2},"edit-link":{"label":"edit","base":"https://github.com/nats-io/docs/edit/master"},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"toggle-chapters":{}},"theme":"default","author":"The NATS Maintainers","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"NATS","gitbook":"*","description":"Administrative, developer and conceptual documentation for the NATS messaging system."},"file":{"path":"nats_streaming/configuring/cfgfile.md","mtime":"2019-09-23T22:49:18.490Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-09-27T21:13:11.925Z"},"basePath":"../..","book":{"language":""}});
});
</script>
</div>
<!-- Viz Support -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/viz.js/2.1.2/viz.js"> </script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/viz.js/2.1.2/lite.render.js"> </script>
<!-- Site code -->
<script>
function flash(elem, text, speed) {
if (!elem) {
return;
}
var s = elem.style;
elem.textContent = text;
s.display = 'block';
s.opacity = 1;
(function fade() {
(s.opacity -= .1) < .1 ? s.display = "none" : setTimeout(fade, speed)
})();
}
function copyToClipboard(text, el) {
var copyTest = document.queryCommandSupported('copy');
var elOriginalText = el.getAttribute('data-original-title');
if (copyTest === true) {
var copyTextArea = document.createElement("textarea");
copyTextArea.value = text;
document.body.appendChild(copyTextArea);
copyTextArea.select();
try {
var successful = document.execCommand('copy');
var msg = successful ? 'Copied!' : 'Whoops, not copied!';
var parent = el.parentNode.parentNode;
var msgElem = parent.querySelector(".copy-msg");
flash(msgElem, msg, 100);
} catch (err) {
console.log('Oops, unable to copy', err);
}
document.body.removeChild(copyTextArea);
el.setAttribute('data-original-title', elOriginalText);
} else {
// Fallback if browser doesn't support .execCommand('copy')
window.prompt("Copy to clipboard: Ctrl+C or Command+C, Enter", text);
}
}
function processGraphVizSections(elements) {
var elements = document.querySelectorAll("[data-viz]");
var viz = new Viz();
Array.prototype.forEach.call(elements, function (x) {
var engine = x.getAttribute("data-viz");
var image = viz.renderImageElement(x.innerText, {
format: "png",
engine: engine
}).then(function (element) {
x.parentNode.insertBefore(element, x);
});
});
};
function updateLanguageParameter(value) {
const param = "lang";
if (window.location.href.indexOf("?") >= 0) {
const regExp = new RegExp(param + "(.+?)(&|$)", "g");
const newUrl = window.location.href.replace(regExp, param + "=" + encodeURIComponent(value) + "$2");
window.history.pushState("", "", newUrl);
} else {
const newUrl = window.location.href + "?" + param + "=" + encodeURIComponent(value);
window.history.pushState("", "", newUrl);
}
}
function getLanguageParameter() {
var match = RegExp('[?&]lang=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
function docReady() {
window.gitbook.events.bind("page.change", function () {
pageChanged();
});
var searchInput = document.querySelector('#book-search-input input');
if (searchInput) {
searchInput.addEventListener('keyup', function(event) {
if (event.keyCode === 13) {
event.target.blur();
}
});
}
}
function pageChanged() {
var logos = document.querySelectorAll(".nats");
if (logos && logos.length == 0) {
gitbook.toolbar.createButton({
icon: 'nats',
label: 'NATS Home Page',
position: 'right',
onClick: function () {
var win = window.open("https://nats.io/", '_blank');
win.focus();
}
});
}
document.querySelectorAll('.js-copy').forEach(elem => {
elem.addEventListener("click", function () {
var el = this;
var parent = this.parentNode.parentNode;
var code = parent.querySelector('code');
var text = code.textContent || code.innerText;
copyToClipboard(text, el);
})
});
document.querySelectorAll('.api-lang').forEach(elem => {
elem.addEventListener("click", function () {
var curLang = sessionStorage.getItem('nats-api-language');
var lang = this.getAttribute('data-language');
// Stop the infinite loop
if (curLang == lang) {
return;
}
sessionStorage.setItem('nats-api-language', lang); // So we only do this 1x
updateLanguageParameter(lang)
document.querySelectorAll('.api-lang[data-language=' + lang + ']').forEach(elem => {
elem.click();
});
})
});
if (sessionStorage) {
var curLang = sessionStorage.getItem('nats-api-language');
var queryLang = getLanguageParameter();
var lang = curLang;
if (queryLang) { // query takes precedent
lang = queryLang
}
if (lang) {
document.querySelectorAll('.api-lang[data-language=' + lang + ']').forEach(elem => {
elem.click();
});
}
}
setTimeout(function () {
processGraphVizSections();
}, 1);
}
if (document.readyState != 'loading') docReady();
else if (document.addEventListener) document.addEventListener('DOMContentLoaded', docReady);
else document.attachEvent('onreadystatechange', function () {
if (document.readyState == 'complete') docReady();
});
</script>
<!-- Github Buttons -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
<!-- Styles -->
<style>
.nats {
display: inline-block;
width: 16px;
height: 16px;
background: url(https://nats.io/img/nats-icon-color.svg);
background-size: 16px 16px;
background-repeat: no-repeat;
}
div.graphviz {
background: transparent;
border: 0;
padding-top: 15px;
padding-right: 15px;
padding-bottom: 25px;
padding-left: 15px;
text-align: center;
}
code[data-viz] {
display: none;
}
.tab-wrap {
transition: 0.3s box-shadow ease;
border-radius: 6px;
max-width: 100%;
display: flex;
flex-wrap: wrap;
position: relative;
list-style: none;
background-color: #fff;
margin: 20px 0;
/* box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);*/
}
.tab-wrap:hover {
box-shadow: 0 12px 23px rgba(0, 0, 0, 0.23), 0 10px 10px rgba(0, 0, 0, 0.19);
}
.tab {
display: none;
}
/* Using scss these would be generated, we have to manually create enough for all tabs, start with 8 */
.tab:checked:nth-of-type(1)~.tab__content:nth-of-type(1) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:checked:nth-of-type(2)~.tab__content:nth-of-type(2) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:checked:nth-of-type(3)~.tab__content:nth-of-type(3) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:checked:nth-of-type(4)~.tab__content:nth-of-type(4) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:checked:nth-of-type(5)~.tab__content:nth-of-type(5) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:checked:nth-of-type(6)~.tab__content:nth-of-type(6) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:checked:nth-of-type(7)~.tab__content:nth-of-type(7) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:checked:nth-of-type(8)~.tab__content:nth-of-type(8) {
opacity: 1;
transition: 0.5s opacity ease-in, 0.8s -webkit-transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease;
transition: 0.5s opacity ease-in, 0.8s transform ease, 0.8s -webkit-transform ease;
position: relative;
top: 0;
z-index: 100;
-webkit-transform: translateY(0px);
transform: translateY(0px);
text-shadow: 0 0 0;
}
.tab:first-of-type:not(:last-of-type)+label {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.tab:not(:first-of-type):not(:last-of-type)+label {
border-radius: 0;
}
.tab:last-of-type:not(:first-of-type)+label {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.tab:checked+label {
background-color: #fff;
box-shadow: 0 -1px 0 #fff inset;
cursor: default;
font-weight: bold;
border: 1px solid #ddd;
border-bottom-color: transparent;
}
.tab:checked+label:hover {
box-shadow: 0 -1px 0 #fff inset;
background-color: #fff;
}
.tab+label {
box-shadow: 0 -1px 0 #eee inset;
border-radius: 6px 6px 0 0;
cursor: pointer;
display: block;
text-decoration: none;
color: #27aae1;
flex-grow: 3;
text-align: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
text-align: center;
transition: 0.3s background-color ease, 0.3s box-shadow ease;
height: 50px;
box-sizing: border-box;
padding: 15px;
}
.tab+label:hover {
background-color: #f9f9f9;
box-shadow: 0 1px 0 #f4f4f4 inset;
}
.tab__content {
padding: 2px 2px;
background-color: transparent;
position: absolute;
width: 100%;
z-index: -1;
opacity: 0;
left: 0;
-webkit-transform: translateY(-3px);
transform: translateY(-3px);
border-radius: 6px;
}
.tab__content pre {
margin-bottom: 0px !important;
}
.toolbar-icons {
display: inline-block;
position: relative;
padding-left: 4px;
}
a.toolbar-icons {
text-decoration: none;
}
.toolbar-icons .mdi {
color: #4183c4;
}
.copy-msg {
color: #4183c4;
}
.pull-right {
float: right !important;
}
.pull-left {
float: left !important;
}
</style>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-111730698-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-111730698-1');
</script>
<script src="../../gitbook/gitbook.js"></script>
<script src="../../gitbook/theme.js"></script>
<script src="../../gitbook/gitbook-plugin-toggle-chapters/toggle.js"></script>
<script src="../../gitbook/gitbook-plugin-edit-link/plugin.js"></script>
<script src="../../gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="../../gitbook/gitbook-plugin-search/search.js"></script>
<script src="../../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="../../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="../../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>