void nsq_message_handler(struct NSQReader *rdr, struct NSQDConnection *conn, struct NSQMessage *msg, void *ctx) { int ret = 0; char *payload = (char*)shm_malloc(msg->body_length + 1); if (!payload) { LM_ERR("error allocating shared memory for payload"); } strncpy(payload, msg->body, msg->body_length); payload[msg->body_length] = 0; ret = nsq_consumer_event(payload, rdr->channel, rdr->topic); buffer_reset(conn->command_buf); if (ret < 0) { nsq_requeue(conn->command_buf, msg->id, 100); } else { nsq_finish(conn->command_buf, msg->id); } buffered_socket_write_buffer(conn->bs, conn->command_buf); buffer_reset(conn->command_buf); nsq_ready(conn->command_buf, rdr->max_in_flight); buffered_socket_write_buffer(conn->bs, conn->command_buf); free_nsq_message(msg); shm_free(payload); }
static void message_handler(struct NSQReader *rdr, struct NSQDConnection *conn, struct NSQMessage *msg, void *ctx) { _DEBUG("%s: %ld, %d, %s, %lu, %.*s\n", __FUNCTION__, msg->timestamp, msg->attempts, msg->id, msg->body_length, (int)msg->body_length, msg->body); int ret = 0; //TestNsqMsgContext * test_ctx = (TestNsqMsgContext *)ctx; //int ret= ctx->process(msg->body, msg->body_length); buffer_reset(conn->command_buf); if(ret < 0){ nsq_requeue(conn->command_buf, msg->id, 100); }else{ nsq_finish(conn->command_buf, msg->id); } buffered_socket_write_buffer(conn->bs, conn->command_buf); buffer_reset(conn->command_buf); nsq_ready(conn->command_buf, rdr->max_in_flight); buffered_socket_write_buffer(conn->bs, conn->command_buf); free_nsq_message(msg); }