rabbitmq - 使用 Ruby-Amqp 时如何保持 AMQP 连接打开?

标签 rabbitmq amqp

我正在使用 RabbitMQ 和 ruby-amqp与 Rails。当 Controller 收到消息时,我执行以下操作:

def create 
  AMQP.start("amqp://localhost:5672") do |connection|
    channel  = AMQP::Channel.new(connection)
    exchange = channel.direct("")
    exchange.publish("some msg", :routing_key => "some key")

    EventMachine.add_timer(2) do
      exchange.delete
      connection.close { EventMachine.stop }
    end
  end
end
  • 有没有办法保持 AMQP 连接打开,所以我不必调用 start每次请求进来?

  • 我假设打开与 Rabbit MQ 的连接效率低下,但是我还没有找到将代码块传递给持久连接的方法。

    最佳答案

    如果您只想保持 AMQP 连接打开,请尝试设置一个全局变量以保持连接唯一。

    def start_em
      EventMachine.run do
        $connection = AMQP.connect(CONNECTION_SETTING) unless $connection
        yield
      end
    end
    
    def publish(message, options = {})
      start_em {
        channel  = AMQP::Channel.new($connection)           
        exchange = channel.direct('')                          
        exchange.publish(message, {:routing_key => 'rails01'}.merge(options))
        EventMachine.add_timer(1) { exchange.delete }        
      }
    end
    

    并且不要忘记在发布消息后删除 channel 。

    关于rabbitmq - 使用 Ruby-Amqp 时如何保持 AMQP 连接打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827666/

    相关文章:

    symfony - 对 Symfony Messenger 使用默认传输(跳过 amqp)

    php - RabbitMq 按优先级消费

    architecture - RabbitMQ中需要单独的死信交换吗?

    rabbitmq - 使用 Spring AMQP 延迟消息发送到监听器

    python - RabbitMQ:Pika:消费时添加超时

    python - 轻量级通知技术

    java - SpringBoot + RabbitMQ 抛出错误 : java.net.ConnectException: Connection refused

    java - 无法反序列化包含从 AMQP 消息传递收到的 LocalDate 的对象

    python - Node.js 服务器从 AMQP 队列获取消息后如何向客户端传递响应?

    process - AMQP 延迟传递和防止重复消息