##
## Licensed to the Apache Software Foundation (ASF) under one
## or more contributor license agreements.  See the NOTICE file
## distributed with this work for additional information
## regarding copyright ownership.  The ASF licenses this file
## to you under the Apache License, Version 2.0 (the
## "License"); you may not use this file except in compliance
## with the License.  You may obtain a copy of the License at
##
##   http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing,
## software distributed under the License is distributed on an
## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
## KIND, either express or implied.  See the License for the
## specific language governing permissions and limitations
## under the License
##


[
##
## Container section - Configures the general operation of the AMQP container.
##
    ["container", {
##
## workerThreads - The number of threads that will be created to
## process message traffic and other application work (timers, nonAmqp
## file descriptors, etc.)
##
## The number of threads should be related to the number of available
## processor cores.  To fully utilize a quad-core system, set the
## number of threads to 4.
##
	"workerThreads": 4,
	
##
## containerName - The name of the AMQP container.  If not specified,
## the container name will be set to a value of the container's
## choosing.  The automatically assigned container name is not
## guaranteed to be persistent across restarts of the container.
##
	"containerName": "Qpid.Dispatch.Router.A"
    }],

    ["router", {
	"mode": "standalone",
	"routerId": "QDR"
    }],

##
## Listeners and Connectors
##
    ["listener", {
	"addr": "0.0.0.0",
	"port": 20000,
	"saslMechanisms": "ANONYMOUS"
    }],
    ["fixedAddress", {
	"prefix": "/closest/",
	"fanout": "single",
	"bias": "closest"
    }],

    ["fixedAddress", {
	"prefix": "/spread/",
	"fanout": "single",
	"bias": "spread"
    }],

    ["fixedAddress", {
	"prefix": "/multicast/",
	"fanout": "multiple"
    }],

    ["fixedAddress", {
	"prefix": "/",
	"fanout": "multiple"
    }]
]

