Git Product home page Git Product logo

bloomberg / amqpprox Goto Github PK

View Code? Open in Web Editor NEW
73.0 14.0 14.0 642 KB

An AMQP 0.9.1 proxy server, designed for use in front of an AMQP 0.9.1 compliant message queue broker such as RabbitMQ.

License: Apache License 2.0

CMake 0.85% Makefile 0.19% C++ 88.99% Shell 0.47% Dockerfile 0.11% RobotFramework 2.43% JavaScript 2.32% Erlang 0.10% Python 2.27% Rust 2.27%
amqp amqp0-9-1 amqp-proxy rabbitmq

amqpprox's People

Contributors

678098 avatar adamncasey avatar alaric avatar ccotter avatar chinmay1412 avatar vilmars avatar willhoy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

amqpprox's Issues

Can't add more than one DNS based backends with the same port

Describe the bug
This sequence doesn't work:

BACKEND ADD_DNS b1 dc1 rabbitcluster1-lb.example.com 5672
BACKEND ADD_DNS b2 dc1 rabbitcluster2-lb.example.com 5672

Backend addresses are stored with IP&port key and thus you can't have two DNS based backends on the same port... IP is always "" when using ADD_DNS. Maybe it could just resolve the hostname even when using ADD_DNS.

To Reproduce
Steps to reproduce the behavior:

  1. start amqpprox server
  2. execute BACKEND ADD_DNS b1 dc1 rabbitcluster1-lb.example.com 5672 (all good)
  3. execute BACKEND ADD_DNS b2 dc1 rabbitcluster2-lb.example.com 5672 (fails)
  4. error output from amqprox_ctl: Failed to insert backend: 'b2 (dc1): rabbitcluster2-lb.example.com :5672', error code: 1

Expected behavior
It is very much common to run multiple RabbitMQ services on the same port. :)

Environment (please complete the following information):

  • Makes no difference, I guess... I encountered identical results running it on Darwin and Linux

OpenSSL 3.x compatiblity

When I try to build amqpprox, I run into a conan failure that says that its [email protected] package cannot be provisioned.

I tried both macOS and Fedora Linux, and it turns out, on both machines I run OpenSSL/LibreSSL 3.x.

Am I correct to assume that amqpprox currently requires OpenSSL 1.1?

populate d_mappings from conf file?

Hi!
I can't find this in the github repo or in the code , but is there any way to load mappings and other configurations from a file?
I am looking at the code and it seems that the map vhost to backend is mainly being held in memory and load through the cli .

I personally need this to guarantee that on failure the apps comes back with the same conf (could be done with systemd hooks , but a config file would be nicer?)

Thank you for putting this on github , been waiting for something like this for quite a while.

High availability (HA)

First of all thank you for the amazing efforts on this great tool for amqp.

I was wondering what you do in Bloomberg to protect against a possible failure of the system hosting amqpprox. Do you have more than one instance running on different server? If one fails, how do you direct the traffic to another instance? Do you have some sort of clustering over amqpprox? any plan on that?

I was thinking to adopt amqpprox in an enterprise scenario, and I try to have all the single point of failure in HA.

Configuration persistence

Does amqpprox support configuration persistence and save the configuration on file?

How it survives a server reboot or fail? Do you script the configuration as amqpprox_ctl commands and submit on each reboot?

Probably is connected to #57

Docker image

Would be very nice to have a docker image hosted on the hub ready to be configured and run, with a build pipeline that is connected to this repo and builds a new version every time there's a new tagged version.

Proxy protocol v2 support for ingress and egress

Is your feature request related to a problem? Please describe.
We currently have client IP propagated down (over multiple proxies) to the RMQ instance. If we were to use amqpprox and retain the same functionality, we would need to have support for ingress proxy protocol on amqpprox side as well, for we can't position amqpprox on the edge. Due to the fact that our infrastructure supports only proxy protocol v2... well, that's why we would like to see in/out v2 support. ๐Ÿ˜ƒ

Describe the solution you'd like
Implementation of proxy protocol on ingress so that amqpproxy could propagate the real client IP down the road... and while on it we would like to see support for v2 proxy protocol thrown in. ๐Ÿ˜„

Describe alternatives you've considered
We could forget about real client IPs, but that is unfortunately easier said than done. ๐Ÿคท๐Ÿปโ€โ™‚๏ธ

What's the use of PAUSE a vhost?

As far as i notice the clients start loosing HB frames until they disconnect , what i was able to replicate is PAUSING/UNPAUSING quick enough within the HB Interval configured on the clients (and hopefully loosing 1 of the 2 HB frames within the interval) will not disconnect the client.

I wonder what's the function of PAUSING ? also i tried PAUSING ->REMAPPING -> UNPAUSING , but still my client ends up going to the same rabbitmq server until i reconnect.

Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.