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) { _DEBUG("%s: %lld, %d, %s, %lu, %.*s\n", __FUNCTION__, msg->timestamp, msg->attempts, msg->id, msg->body_length, (int)msg->body_length, msg->body); buffer_reset(conn->command_buf); 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); }
static void nsqd_connection_read_data(struct BufferedSocket *buffsock, void *arg) { struct NSQDConnection *conn = (struct NSQDConnection *)arg; struct NSQMessage *msg; conn->current_frame_type = ntohl(*((uint32_t *)buffsock->read_buf->data)); buffer_drain(buffsock->read_buf, 4); conn->current_msg_size -= 4; _DEBUG("%s: frame type %d, data: %.*s\n", __FUNCTION__, conn->current_frame_type, conn->current_msg_size, buffsock->read_buf->data); conn->current_data = buffsock->read_buf->data; switch (conn->current_frame_type) { case NSQ_FRAME_TYPE_RESPONSE: if (strncmp(conn->current_data, "_heartbeat_", 11) == 0) { buffer_reset(conn->command_buf); nsq_nop(conn->command_buf); buffered_socket_write_buffer(conn->bs, conn->command_buf); } break; case NSQ_FRAME_TYPE_MESSAGE: msg = nsq_decode_message(conn->current_data, conn->current_msg_size); if (conn->msg_callback) { conn->msg_callback(conn, msg, conn->arg); } break; } buffer_drain(buffsock->read_buf, conn->current_msg_size); buffered_socket_read_bytes(buffsock, 4, nsqd_connection_read_size, conn); }
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); }