Git Product home page Git Product logo

Comments (5)

michaelklishin avatar michaelklishin commented on July 17, 2024

Use a separate exchange object and :routing_key. The reason behind this deprecation is that it makes many people believe "messages are published to queues", which is not really the case in the AMQP model. Other clients do not try to add these syntactic sugar layers and engineers using them have a hard time understanding Ruby developers who insist they are "publishing messages to queues".

from bunny.

thobruk avatar thobruk commented on July 17, 2024

Heh. It's kind of a rude awakening for those of us who believed that "messages are published to queues". I'm having difficulty understanding from the documentation how I would go about using a separate exchange object and routing_key, since the examples are all of the 'messages are published to queues' variety.

Ben

-----Original Message-----
From: michaelklishin [mailto:[email protected]]
Sent: Monday, July 18, 2011 2:38 PM
To: Ben Thomas
Subject: Re: [bunny] ~ Qrack::Queue#publish will be removed in Bunny 0.8. Deprecation Message. (#15)

Use a separate exchange object and :routing_key. The reason behind this deprecation is that it makes many people believe "messages are published to queues", which is not really the case in the AMQP model. Other clients do not try to add these syntactic sugar layers and engineers using them have a hard time understanding Ruby developers who insist they are "publishing messages to queues".

Reply to this email directly or view it on GitHub:
#15 (comment)

from bunny.

michaelklishin avatar michaelklishin commented on July 17, 2024

For amqp gem I ended up keeping Queue#publish and simply leaving it out from the guides, but not being able to talk to other developers without completely confusing them is even worse. One of the ideas behind AMQP was technology agnosticism.

You can read amqp gems' Working With Exchanges guide that explains various exchange types, message attributes and so on. Other guides also introduce various concepts & use cases. I know people who don't even use Ruby and find these guides useful.

"Publishing to queue a.queue" using default exchange (which bunny uses user the hood) looks like this:

exchange.publish(payload, :key => "a.queue")

I could not quickly figure out how to obtain default exchange using bunny APIs but it is just a direct exchange with the name of "" (empty string).

from bunny.

celldee avatar celldee commented on July 17, 2024

Here's an example that explicitly uses the default direct exchange that might help you -

require 'bunny'

b = Bunny.new

# start a communication session with the amqp server
b.start

# declare a queue
q = b.queue("test1")

# declare default direct exchange which is bound to all queues
e = b.exchange("")

# publish a message to the exchange which then gets routed to the queue
e.publish("Hello, Delilah!", :key => 'test1')

# get message from the queue
msg = q.pop[:payload]

puts "This is the message: " + msg + "\n\n"

# close the connection
b.stop

from bunny.

botanicus avatar botanicus commented on July 17, 2024

That's a fair point. I added explanation to the warning and released 0.7.1 6bc0d05

from bunny.

Related Issues (20)

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.