示例#1
0
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);
}
示例#2
0
文件: test.c 项目: applewjg/libnsq
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);
}