【问题标题】:RabbitMQ: How to send Dead Letter Exchange from Erlang clientRabbitMQ:如何从 Erlang 客户端发送死信交换
【发布时间】:2015-09-05 11:19:37
【问题描述】:

我想从 Erlang 客户端发送死信交换,但尝试了几天但无法弄清楚如何通过 Ruby 客户端轻松发送它。

amqp_channel:call(Channel, #'queue.declare'{
  queue = QueueName,
  arguments = [{<<"x-dead-letter-exchange">>, <<"">>}, {<<"x-dead-letter-routing-key">>, <<"task_pool1">>}, {<<"x-message-ttl">>, UnhideInMinute*60000}],
  durable = true}
),
io:format("DECLARED CHANNEL.~n"),
amqp_channel:cast(Channel,
  #'basic.publish'{
    exchange = <<"">>,
    routing_key = QueueName
    },
  #amqp_msg{props = #'P_basic'{delivery_mode = 2},
  payload = JsonMsg}
)

谢谢

【问题讨论】:

标签: erlang queue rabbitmq message-queue dead-letter


【解决方案1】:

问题出在你设置参数的时候。

代码如下:

 %% Start a network connection
  {ok, Connection} = amqp_connection:start(#amqp_params_network{}),
  erlang:display("Connection established"),
  Ex=#'exchange.declare'{exchange    = <<"my_exchange">>,
    ticket      = 0,
    type        = <<"topic">>,
    passive     = false,
    durable     = false,
    auto_delete = false,
    internal    = false,
    nowait      = false,
    arguments   = []},

  {ok, Channel} = amqp_connection:open_channel(Connection),
  amqp_channel:call(Channel, Ex),
  erlang:display("Exchange created"),
  amqp_channel:call(Channel, #'queue.declare'{
    queue = <<"myqueue12">>,
    arguments = [{<<"x-dead-letter-exchange">>,longstr, <<"my_exchange">>}, {<<"x-dead-letter-routing-key">>,longstr, <<"task_pool1">>}, {<<"x-message-ttl">>, signedint,60000}],
    durable = true}
  ),

当您设置参数时,您还必须指定类型(longstr, signedint)

我将队列绑定到 ex"my_exchange",然后我向队列:"myqueue12" 发布了一条消息,它工作正常:

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2012-06-03
    • 2014-09-14
    • 2012-11-17
    • 2023-03-08
    • 1970-01-01
    • 2015-11-17
    • 2013-04-16
    • 2013-12-21
    相关资源
    最近更新 更多