int SrsSource::create_forwarders()
{
	int ret = ERROR_SUCCESS;
	
	SrsConfDirective* conf = config->get_forward(req->vhost);
	for (int i = 0; conf && i < (int)conf->args.size(); i++) {
		std::string forward_server = conf->args.at(i);
		
		SrsForwarder* forwarder = new SrsForwarder(this);
		forwarders.push_back(forwarder);
	
		double queue_size = config->get_queue_length(req->vhost);
		forwarder->set_queue_size(queue_size);
		
		if ((ret = forwarder->on_publish(req, forward_server)) != ERROR_SUCCESS) {
			srs_error("start forwarder failed. "
				"vhost=%s, app=%s, stream=%s, forward-to=%s",
				req->vhost.c_str(), req->app.c_str(), req->stream.c_str(),
				forward_server.c_str());
			return ret;
		}
	}

	return ret;
}
int SrsSource::on_reload_queue_length(string vhost)
{
	int ret = ERROR_SUCCESS;
	
	if (req->vhost != vhost) {
		return ret;
	}

	double queue_size = config->get_queue_length(req->vhost);
	
	if (true) {
		std::vector<SrsConsumer*>::iterator it;
		
		for (it = consumers.begin(); it != consumers.end(); ++it) {
			SrsConsumer* consumer = *it;
			consumer->set_queue_size(queue_size);
		}

		srs_trace("consumers reload queue size success.");
	}
	
	if (true) {
		std::vector<SrsForwarder*>::iterator it;
		
		for (it = forwarders.begin(); it != forwarders.end(); ++it) {
			SrsForwarder* forwarder = *it;
			forwarder->set_queue_size(queue_size);
		}

		srs_trace("forwarders reload queue size success.");
	}
	
	return ret;
}