Project: springxd
Issue XD-3612: Redis Message Bus still accessed when using direct binding
I have a distributed XD Cluster with one admin and two containers using Redis as the message bus. In certain cases I want to use direct binding to remove communication with the message bus and deploy all modules to all containers with the aim of improving performance. I’ve found that even when using direct binding, XD still communicates with Redis when it shouldn’t need to. This could have an impact on performance. This is easily reproducible in our 2 container cluster as follows: Use the redis-cli monitor command to monitor Redis. Create and deploy a simple stream with direct binding: {code} stream create --definition "http | log" --name httpLog stream deploy --name httpLog --properties "module.*.count=0" {code} As expected both modules get deployed to both nodes. Testing shows messages sent to the http endpoint of one container always come out in the log for that container implying direct binding is in play as expected. However once the streams are deployed the Redis monitor starts showing a Redis queue being accessed from both XD conatiners: {code} 1444731527.086325 [0 10.0.1.8:57454] "brpop" "queue.httpLog.0" "1" 1444731528.086304 [0 10.0.1.4:37337] "brpop" "queue.httpLog.0" "1" 1444731529.086341 [0 10.0.1.8:57454] "brpop" "queue.httpLog.0" "1" 1444731530.086317 [0 10.0.1.4:37337] "brpop" "queue.httpLog.0" "1" 1444731531.086340 [0 10.0.1.8:57454] "brpop" "queue.httpLog.0" "1" 1444731532.086505 [0 10.0.1.4:37337] "brpop" "queue.httpLog.0" "1" {code} This shouldn’t need to happen in direct binding. These messages stop once the stream is undeployed.
Story points: 5