Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow control over exchange creation #112

Open
nahpeps opened this issue Sep 21, 2015 · 4 comments
Open

Allow control over exchange creation #112

nahpeps opened this issue Sep 21, 2015 · 4 comments

Comments

@nahpeps
Copy link

nahpeps commented Sep 21, 2015

I recognized that is is not possible to control the process of creating an exchange.

In the Sub and Pub.connect functions the exchange is always created with a predefined set of exchange options:

ch.assertExchange(source,
                      this.options.routing || 'fanout',
                      {durable: false, autoDelete: false})
      .then(function(ok) {
        return ch.bindQueue(queue, source, topic);
      })
      .then(callback);
  }

Here the setting is always {durable: false, autoDelete: false}).

It would be really great to have the chance to overwrite these settings in the exchange creation.
This issue is to #63.

I would like to do something like:

ch.assertExchange(source,
                      this.options.routing || 'fanout',
                     exchangeOptions)
      .then(function(ok) {
        return ch.bindQueue(queue, source, topic);
      })
      .then(callback);
  }
@zamnuts
Copy link

zamnuts commented Sep 23, 2015

+1 Could really use this feature. noCreate either puts a burden on the sysadmin role, or creates a manual step for the application owner. It appears that this flexibility exists in Ruby's RabbitMQ lib, so I'm not sure regarding the reason for the handicap.

@squaremo
Copy link
Owner

It appears that this flexibility exists in Ruby's RabbitMQ lib, so I'm not sure regarding the reason for the handicap.

This flexibility also exists in https://github.com/squaremo/amqp.node. Calling it a handicap here is not very fair: the idea of rabbit.js is to make using RabbitMQ transparently easy, and that means eliding options that don't matter for the socket-like abstractions given.

I am starting to think that the socket-like abstractions are the less useful bit. Would it be better to just have ways, in amqplib, of publishing and consuming via streams?

@zamnuts
Copy link

zamnuts commented Sep 23, 2015

@squaremo I am new to RabbitMQ (and AMQP in general), and am under the impression that amqp.node is for any service that supports AMQP, while rabbit.js is specific to the RabbitMQ flavor and its individual paradigms. I could be wrong and incorrectly aligned with this project's goals, so I apologize for that.

With this in mind, considering RabbitMQ's management interface (see /api/exchanges/vhost/name) reveals AMQP's underlying e.g. durable option, I would expect it to be presented in rabbit.js.

Perhaps omitting functionality (e.g. options) altogether is less favorable than having them available but with intrinsic defaults. There already exists a hint of this with routing being fanout.

From a beginners perspective, the current socket-like abstractions are useful organizationally speaking, albeit I don't personally use them in a stream context (yet).

@nahpeps
Copy link
Author

nahpeps commented Sep 24, 2015

I am also new in rabbit.js and the whole node.js context. For me, the abstraction of using sockets instead of streams was very helpful, because I don't need to deal with the pitfalls of streams, but use a concept that I know in general.

But of course I also read the RabbitMQ documentation and was irritated because I was not able to create an autoDelete exchange until I digged into the source.

So just adding the possibility to give, maybe optional, settings to the socket creation which then are merged with a default option set, would be a great thing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants