Thanks for helping me out, I ended up rolling back to 3.6.15 and everything is working ok :)
I also tried to reproduce the problem on a clean server. At first I thought that it was a general problem with federation-upstream-set, but it seems to fail on my specific use-case where I connect exchanges on different vhosts on the same server using federation.
docker run -d -p 15672:15672 --name buggy_rabbit rabbitmq:3.7.4-management
docker exec -ti buggy_rabbit bash
# Enable pluggins
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
# Create vhost
rabbitmqctl add_vhost api
rabbitmqctl set_permissions -p api guest ".*" ".*" ".*"
# Create Exchanges
rabbitmqadmin -u guest -p guest declare exchange --vhost=api name=test1 type=fanout
rabbitmqadmin -u guest -p guest declare exchange --vhost=api name=test2 type=fanout
# Create Queues
rabbitmqadmin -u guest -p guest declare queue --vhost=api name=testq1
rabbitmqadmin -u guest -p guest declare queue --vhost=api name=testq2
# Bind Queues
rabbitmqadmin -u guest -p guest declare binding --vhost=api source=test1 destination_type="queue" destination=testq1
rabbitmqadmin -u guest -p guest declare binding --vhost=api source=test2 destination_type="queue" destination=testq2
# Create Empty Sets
rabbitmqctl set_parameter -p api federation-upstream-set fed-up-set-test1 '[]'
rabbitmqctl set_parameter -p api federation-upstream-set fed-up-set-test2 '[]'
# Create Policies
rabbitmqctl set_policy -p api --apply-to exchanges fed-pol-test1 "test1" '{"federation-upstream-set":"fed-up-set-test1"}'
rabbitmqctl set_policy -p api --apply-to exchanges fed-pol-test2 "test2" '{"federation-upstream-set":"fed-up-set-test2"}'
#####
# Create client vhost
rabbitmqctl add_vhost client1
rabbitmqctl set_permissions -p client1 guest ".*" ".*" ".*"
# Create Exchanges
rabbitmqadmin -u guest -p guest declare exchange --vhost=client1 name=test1 type=fanout
rabbitmqadmin -u guest -p guest declare exchange --vhost=client1 name=test2 type=fanout
# Create Federated Upstreams
rabbitmqctl set_parameter federation-upstream -p api fed-up-client1-test1 '{"uri":"amqp://guest:gu...@127.0.0.1:5672/client1","ack-mode":"on-confirm","trust-user-id":false,"exchange":"test1","max-hops":1}' rabbitmqctl set_parameter federation-upstream -p api fed-up-client1-test2 '{"uri":"amqp://guest:gu...@127.0.0.1:5672/client1","ack-mode":"on-confirm","trust-user-id":false,"exchange":"test2","max-hops":1}'
# Add upstreams to sets
rabbitmqctl set_parameter -p api federation-upstream-set fed-up-set-test1 '[{"upstream": "fed-up-client1-test1"}]' # This step doesn't work
rabbitmqctl set_parameter -p api federation-upstream-set fed-up-set-test2 '[{"upstream": "fed-up-client1-test2"}]'
#####
# Create client vhost
rabbitmqctl add_vhost client2
rabbitmqctl set_permissions -p client2 guest ".*" ".*" ".*"
# Create Exchanges
rabbitmqadmin -u guest -p guest declare exchange --vhost=client2 name=test1 type=fanout
rabbitmqadmin -u guest -p guest declare exchange --vhost=client2 name=test2 type=fanout
# Create Federated Upstreams
rabbitmqctl set_parameter federation-upstream -p api fed-up-client2-test1 '{"uri":"amqp://guest:gu...@127.0.0.1:5672/client2","ack-mode":"on-confirm","trust-user-id":false,"exchange":"test1","max-hops":1}' rabbitmqctl set_parameter federation-upstream -p api fed-up-client2-test2 '{"uri":"amqp://guest:gu...@127.0.0.1:5672/client2","ack-mode":"on-confirm","trust-user-id":false,"exchange":"test2","max-hops":1}'
# Add upstreams to sets
rabbitmqctl set_parameter -p api federation-upstream-set fed-up-set-test1 '[{"upstream": "fed-up-client1-test1"},{"upstream": "fed-up-client2-test1"}]'
rabbitmqctl set_parameter -p api federation-upstream-set fed-up-set-test2 '[{"upstream": "fed-up-client1-test2"},{"upstream": "fed-up-client2-test2"}]'
This whole process works on
rabbitmq:3.6.15-management, so it might be something really specific to this way to use this feature. I can't discard that it might be some problem on the docker image or the Erlang version provided (
20.2.4).