我正在尝试订阅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。
答案 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
记录中,一次在状态中。看起来此消息应该匹配,因此状态中的标记可能不等于传递标记。