Skip to content

Commit 5f6b581

Browse files
authored
Refactor the producers list replace the reference with the id as map key (rabbitmq-community#249)
Refactors the producer implementation to use publisher IDs as map keys instead of reference strings, improving performance and consistency in publisher management. - Replaces string references with integer IDs as the primary key for tracking publishers - Updates handler registration to use publisher IDs instead of references - Modifies publisher creation logic to handle optional references Breaking changes - It is not possible to subscribe the same stream twice to the same consumer instance anymore --------- Signed-off-by: Gabriele Santomaggio <G.santomaggio@gmail.com>
1 parent 9906f8d commit 5f6b581

21 files changed

+980
-273
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ __pycache__/
1515
local*
1616
.githooks/
1717
.venv/
18+
.DS_Store
19+
local_ex

Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ format:
1313
poetry run flake8 --exclude=venv,local_tests,docs/examples --max-line-length=120 --ignore=E203,W503,E701,E704
1414
poetry run mypy .
1515

16+
rabbitmq-ha-proxy:
17+
cd compose/ha_tls; rm -rf tls-gen;
18+
cd compose/ha_tls; git clone https://github.com/michaelklishin/tls-gen tls-gen; cd tls-gen/basic; make
19+
mv compose/ha_tls/tls-gen/basic/result/server_*_certificate.pem compose/ha_tls/tls-gen/basic/result/server_certificate.pem
20+
mv compose/ha_tls/tls-gen/basic/result/server_*key.pem compose/ha_tls/tls-gen/basic/result/server_key.pem
21+
cd compose/ha_tls; docker build -t haproxy-rabbitmq-cluster .
22+
cd compose/ha_tls; docker compose down
23+
cd compose/ha_tls; docker compose up
24+
1625
test: format
1726
poetry run pytest .
1827
help:

compose/.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
tls-gen/
2+
.DS_Store
3+
ha_tls/data0
4+
ha_tls/data1
5+
ha_tls/data2
6+
ha_tls/tls-gen

compose/README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
RabbitMQ cluster with HA proxy
2+
===
3+
4+
how to run:
5+
6+
```bash
7+
git clone git@github.com:rabbitmq/rabbitmq-stream-go-client.git .
8+
make rabbitmq-ha-proxy
9+
```
10+
11+
ports:
12+
```
13+
- localhost:5553 #standard stream port
14+
- localhost:5554 #TLS stream port
15+
- http://localhost:15673 #management port
16+
```
17+
18+
RabbitMQ single node with TLS
19+
===
20+
21+
```bash
22+
git clone git@github.com:rabbitmq/rabbitmq-stream-go-client.git .
23+
make rabbitmq-server-tls
24+
```
25+
26+
ports:
27+
```
28+
- localhost:5552 #standard stream port
29+
- localhost:5551 #TLS stream port
30+
- http://localhost:15672 #management port
31+
```

compose/ha_tls/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM haproxy:2.2.22
2+
3+
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[rabbitmq_management, rabbitmq_stream, rabbitmq_stream_management].

compose/ha_tls/conf/rabbitmq.conf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
2+
3+
cluster_formation.classic_config.nodes.1 = rabbit@node0
4+
cluster_formation.classic_config.nodes.2 = rabbit@node1
5+
cluster_formation.classic_config.nodes.3 = rabbit@node2
6+
loopback_users.guest = false
7+
8+
ssl_options.cacertfile = /certs/ca_certificate.pem
9+
ssl_options.certfile = /certs/server_certificate.pem
10+
ssl_options.keyfile = /certs/server_key.pem
11+
listeners.ssl.default = 5671
12+
stream.listeners.ssl.default = 5551
13+
ssl_options.verify = verify_peer
14+
ssl_options.fail_if_no_peer_cert = false

compose/ha_tls/docker-compose.yml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
version: "3"
2+
services:
3+
rabbit_node0:
4+
environment:
5+
- RABBITMQ_ERLANG_COOKIE='secret_cookie'
6+
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_stream advertised_host node0 advertised_port 5562
7+
networks:
8+
- back
9+
hostname: node0
10+
image: rabbitmq:4-management
11+
pull_policy: always
12+
ports:
13+
- "5561:5551"
14+
- "5562:5552"
15+
- "5682:5672"
16+
tty: true
17+
volumes:
18+
- ./conf/:/etc/rabbitmq/
19+
- "./tls-gen/basic/result/:/certs"
20+
- ./data0/:/var/lib/rabbitmq/
21+
rabbit_node1:
22+
environment:
23+
- RABBITMQ_ERLANG_COOKIE='secret_cookie'
24+
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_stream advertised_host node1 advertised_port 5572
25+
networks:
26+
- back
27+
hostname: node1
28+
image: rabbitmq:4-management
29+
pull_policy: always
30+
ports:
31+
- "5571:5551"
32+
- "5572:5552"
33+
- "5692:5672"
34+
tty: true
35+
volumes:
36+
- ./conf/:/etc/rabbitmq/
37+
- "./tls-gen/basic/result/:/certs"
38+
- ./data1/:/var/lib/rabbitmq/
39+
rabbit_node2:
40+
environment:
41+
- RABBITMQ_ERLANG_COOKIE='secret_cookie'
42+
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_stream advertised_host node2 advertised_port 5582
43+
networks:
44+
- back
45+
hostname: node2
46+
image: rabbitmq:4-management
47+
pull_policy: always
48+
ports:
49+
- "5581:5551"
50+
- "5582:5552"
51+
- "5602:5672"
52+
tty: true
53+
volumes:
54+
- ./conf/:/etc/rabbitmq/
55+
- "./tls-gen/basic/result/:/certs"
56+
- ./data2/:/var/lib/rabbitmq/
57+
haproxy:
58+
image: haproxy-rabbitmq-cluster
59+
# container_name: haproxy
60+
hostname: haproxy
61+
ports:
62+
- "5553:5552"
63+
- "5554:5551"
64+
- "5674:5672"
65+
- "15673:15672"
66+
networks:
67+
- back
68+
networks:
69+
back:

compose/ha_tls/haproxy.cfg

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
global
2+
maxconn 4096
3+
4+
defaults
5+
timeout connect 60s
6+
timeout client 60s
7+
timeout server 60s
8+
9+
frontend tcp-0_0_0_0-443
10+
bind *:5551
11+
mode tcp
12+
use_backend rabbitmq-stream-tls
13+
tcp-request inspect-delay 5s
14+
tcp-request content accept if { req_ssl_hello_type 1 }
15+
16+
backend rabbitmq-stream-tls
17+
mode tcp
18+
server rabbit_node0 rabbit_node0:5551 check inter 5000 fall 3
19+
server rabbit_node1 rabbit_node1:5551 check inter 5000 fall 3
20+
server rabbit_node2 rabbit_node2:5551 check inter 5000 fall 3
21+
22+
listen rabbitmq-stream
23+
bind 0.0.0.0:5552
24+
balance roundrobin
25+
server rabbit_node0 rabbit_node0:5552 check inter 5000 fall 3
26+
server rabbit_node1 rabbit_node1:5552 check inter 5000 fall 3
27+
server rabbit_node2 rabbit_node2:5552 check inter 5000 fall 3
28+
29+
listen rabbitmq-amqp
30+
bind 0.0.0.0:5672
31+
balance roundrobin
32+
server rabbit_node0 rabbit_node0:5672 check inter 5000 fall 3
33+
server rabbit_node1 rabbit_node1:5672 check inter 5000 fall 3
34+
server rabbit_node2 rabbit_node2:5672 check inter 5000 fall 3
35+
36+
37+
listen rabbitmq-ui
38+
bind 0.0.0.0:15672
39+
balance roundrobin
40+
server rabbit_node0 rabbit_node0:15672 check inter 5000 fall 3
41+
server rabbit_node1 rabbit_node1:15672 check inter 5000 fall 3
42+
server rabbit_node2 rabbit_node2:15672 check inter 5000 fall 3

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,12 @@ line-length = 110
3636

3737
[tool.mypy]
3838
ignore_missing_imports = true
39+
exclude = ["venv", ".venv", "compose"]
3940

4041
[[tool.mypy.overrides]]
4142
module = "local_tests.*"
4243
ignore_errors = true
4344

4445
[tool.isort]
4546
profile = "black"
47+

0 commit comments

Comments
 (0)