Skip to main content

Quick start

This walks from a fresh install to a message round-trip on both surfaces.

1. Install and finish setup

curl -fsSL https://apt.xcon-q.com/install.sh | sudo sh

Open the wizard (http://<server-ip>:9080/?key=<setup-key>), point it at your xcon-db engine, and set the admin login.

2. Create a token and a topic

From the broker shell:

# a data-plane bearer token for the "main" vhost (prints once)
xcon-quee -config /etc/xcon-quee/xcon-quee.json create-token app "*"

# a topic (queue) with 7-day retention
xcon-quee -config /etc/xcon-quee/xcon-quee.json create-topic main jobs 7

3a. Native SDK (Go)

c := quee.New("http://localhost:9080", token)

// publish — durable on return
c.Publish(ctx, "main", "jobs", quee.Message{Body: []byte("hello"), IdemKey: "1"})

// subscribe — competing consumers, auto-credit, auto-ack on handler success
c.Subscribe(ctx, "main", "jobs", "workers",
quee.SubOptions{Create: true, Start: "earliest"},
func(d *quee.Delivery) error {
fmt.Println(string(d.Body))
return nil // nil = ack, error = nack
})

3b. AMQP (any standard client)

The same topic is a normal AMQP queue. With Python's pika:

import pika
creds = pika.PlainCredentials("quee", TOKEN) # password = the bearer token
conn = pika.BlockingConnection(pika.ConnectionParameters("SERVER", 5672, "/", creds))
ch = conn.channel()
ch.queue_declare(queue="jobs", durable=True)
ch.basic_publish(exchange="", routing_key="jobs", body=b"hello")
for method, props, body in ch.consume("jobs"):
print(body)
ch.basic_ack(method.delivery_tag)

A message published by either surface is consumed by the other — they are one log. See Cross-protocol.