来自RabbitMQ客户端的消息未获得模式匹配

时间:2018-03-25 12:06:09

标签: erlang rabbitmq

我正在尝试订阅RabbitMQ队列,如解释here。我可以在我的进程中获取消息,但不知道它不会与第一个函数子句匹配模式。

handle_info({#'basic.deliver'{delivery_tag = Tag}, #amqp_msg{payload = Payload}}, {Channel, Tag, Module} = State) ->
    amqp_channel:cast(Channel, #'basic.ack'{delivery_tag = Tag}),
    gen_server:start_link(Module, Payload, []),
    {noreply, State};
handle_info(Message, State) -> 
    lager:info("~p", [Message]),
    {noreply, State}.

我的代码看起来与few examples I found on Github相同,但消息总是在第二个子句中结束。这是日志消息。

  

[信息]   {{ 'basic.deliver',<< “amq.ctag-7EUw07D8SQ5cSX9DaVBznw” >>,1,为真,<< “线索” >>,<< “SlackUserCreated” >&GT ;},{amqp_msg,{ 'P_basic',未定义未定义,未定义未定义,未定义未定义,未定义未定义,未定义未定义,未定义未定义,未定义未定义},<< “{\” 用户id \ “:32,\” RETURNURL \ “:\”http://example.org \ “}” >>}}

显然我在这里遗漏了一些明显的东西。这是我正在使用的RabbitMQ client

1 个答案:

答案 0 :(得分:3)

在函数头中,您使用变量@RunWith(PowerMockRunner.class) @PrepareForTest(UserDAO.class) public class UserDAOTest { @Test public void createShouldReturnUserId() { UserDAO dao = new UserDAO(); PowerMockito.mockStatic(UserDAO.class); when(IDGenerator.generateId()).thenReturn(1); int result = dao.create(new User()); assertEquals(1, result); } } 两次,一次在Tag记录中,一次在状态中。看起来此消息应该匹配,因此状态中的标记可能不等于传递标记。