1

私は十分に検索しましたが、この問題を解決する助けを得ることができませんでした. 私は Ruby に非常に慣れていないので、非常に基本的なものが欠けている場合はご容赦ください。

Windows で以下のコードを実行しているときに、「C:/Users/shhashmi/workspace/rabbitmqSender/sender.rb:36:in []': can't convert Symbol into Integer (TypeError) from C:/Users/shhashmi/workspace/rabbitmqSender/sender.rb:36:ingetItem」というエラーが表示されます。C:/Users/shhashmi/workspace/rabbitmqSender/sender.rb:59:in から「」

ただし、コードは CentOS で正常に動作します。

require "bunny"
require "net/http"

# Rabbit MQ
@host = "test.host"
@queue = "test.queue"

#@host = "localhost"
#@queue = "TEST"


# Put your target machine here
@target = "http://localhost:3000/"

def getItem
b = Bunny.new(:host=>@host, :port=>5672,)
# start a communication session with the amqp server
                b.start

                # declare a queue
                q = b.queue(@queue, :auto_delete=>true)


                # 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, everybody! 211", :key => @queue)
                #e.publish("Hello, everybody! 311", :key => @queue)

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

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

                # close the connection
                b.stop
                return msg
end


getItem
4

1 に答える 1

0

あなたのコードでエラーを再現できました。問題は次の行にあります。

msg = q.pop[:payload]

Queue#pop メソッドは、キューからメッセージをポップした後、3 つの項目の配列を返します。メソッドは次のようになります。

delivery_info, message_properties, msg = q.pop

これで、'msg' 変数にメッセージ ペイロードが表示されます。他の 2 つの結果を調べて、有用な情報 (キューに残っているメッセージの数など) を収集するか、不要な場合は完全に無視することができます。

于 2013-06-25T07:14:08.717 に答える