##
## 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
##


router {
    mode: interior
    area: A
    id: QDR.A
}

##
## Listeners and Connectors
##
listener {
    role: inter-router
    host: 0.0.0.0
    port: 20001
    saslMechanisms: ANONYMOUS
}

listener {
    role: normal
    host: 0.0.0.0
    port: 5673
    http: true
    saslMechanisms: ANONYMOUS
}

connector {
    role: inter-router
    host: 0.0.0.0
    port: 20002
    saslMechanisms: ANONYMOUS
}

connector {
    role: inter-router
    host: 0.0.0.0
    port: 20003
    saslMechanisms: ANONYMOUS
}

connector {
    role: inter-router
    host: 0.0.0.0
    port: 20004
    saslMechanisms: ANONYMOUS
}

address {
    prefix: closest
    distribution: closest
}

log {
    module: ROUTER
    enable: trace+
}

log {
    module: ROUTER_MA
    enable: trace+
}
