mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
add function to convert kafka array to vector
This commit is contained in:
parent
84b3981d47
commit
33a015329d
4 changed files with 60 additions and 19 deletions
|
@ -34,6 +34,7 @@ using namespace std;
|
||||||
#include <srs_kernel_utility.hpp>
|
#include <srs_kernel_utility.hpp>
|
||||||
#include <srs_kernel_balance.hpp>
|
#include <srs_kernel_balance.hpp>
|
||||||
#include <srs_kafka_stack.hpp>
|
#include <srs_kafka_stack.hpp>
|
||||||
|
#include <srs_core_autofree.hpp>
|
||||||
|
|
||||||
#ifdef SRS_AUTO_KAFKA
|
#ifdef SRS_AUTO_KAFKA
|
||||||
|
|
||||||
|
@ -178,6 +179,14 @@ int SrsKafkaProducer::request_metadata()
|
||||||
srs_parse_endpoint(broker, server, port);
|
srs_parse_endpoint(broker, server, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string topic = _srs_config->get_kafka_topic();
|
||||||
|
if (true) {
|
||||||
|
std::string senabled = srs_bool2switch(enabled);
|
||||||
|
std::string sbrokers = srs_join_vector_string(brokers->args, ",");
|
||||||
|
srs_trace("kafka request enabled:%s, brokers:%s, current:[%d]%s:%d, topic:%s",
|
||||||
|
senabled.c_str(), sbrokers.c_str(), lb->current(), server.c_str(), port, topic.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
// connect to kafka server.
|
// connect to kafka server.
|
||||||
if ((ret = transport->connect(server, port, SRS_CONSTS_KAFKA_TIMEOUT_US)) != ERROR_SUCCESS) {
|
if ((ret = transport->connect(server, port, SRS_CONSTS_KAFKA_TIMEOUT_US)) != ERROR_SUCCESS) {
|
||||||
srs_error("kafka connect %s:%d failed. ret=%d", server.c_str(), port, ret);
|
srs_error("kafka connect %s:%d failed. ret=%d", server.c_str(), port, ret);
|
||||||
|
@ -185,19 +194,12 @@ int SrsKafkaProducer::request_metadata()
|
||||||
}
|
}
|
||||||
|
|
||||||
// do fetch medata from broker.
|
// do fetch medata from broker.
|
||||||
std::string topic = _srs_config->get_kafka_topic();
|
SrsKafkaTopicMetadataResponse* metadata = NULL;
|
||||||
if ((ret = kafka->fetch_metadata(topic)) != ERROR_SUCCESS) {
|
if ((ret = kafka->fetch_metadata(topic, &metadata)) != ERROR_SUCCESS) {
|
||||||
srs_error("kafka fetch metadata failed. ret=%d", ret);
|
srs_error("kafka fetch metadata failed. ret=%d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
SrsAutoFree(SrsKafkaTopicMetadataResponse, metadata);
|
||||||
// log when completed.
|
|
||||||
if (true) {
|
|
||||||
std::string senabled = srs_bool2switch(enabled);
|
|
||||||
std::string sbrokers = srs_join_vector_string(brokers->args, ",");
|
|
||||||
srs_trace("kafka ok, enabled:%s, brokers:%s, current:[%d]%s:%d, topic:%s",
|
|
||||||
senabled.c_str(), sbrokers.c_str(), lb->current(), server.c_str(), port, topic.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
meatadata_ok = true;
|
meatadata_ok = true;
|
||||||
|
|
||||||
|
|
|
@ -1051,8 +1051,10 @@ SrsKafkaClient::~SrsKafkaClient()
|
||||||
srs_freep(protocol);
|
srs_freep(protocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsKafkaClient::fetch_metadata(string topic)
|
int SrsKafkaClient::fetch_metadata(string topic, SrsKafkaTopicMetadataResponse** pmsg)
|
||||||
{
|
{
|
||||||
|
*pmsg = NULL;
|
||||||
|
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
SrsKafkaTopicMetadataRequest* req = new SrsKafkaTopicMetadataRequest();
|
SrsKafkaTopicMetadataRequest* req = new SrsKafkaTopicMetadataRequest();
|
||||||
|
@ -1064,17 +1066,21 @@ int SrsKafkaClient::fetch_metadata(string topic)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsKafkaResponse* res = NULL;
|
if ((ret = protocol->expect_message(pmsg)) != ERROR_SUCCESS) {
|
||||||
if ((ret = protocol->recv_message(&res)) != ERROR_SUCCESS) {
|
|
||||||
srs_error("kafka recv response failed. ret=%d", ret);
|
srs_error("kafka recv response failed. ret=%d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
SrsAutoFree(SrsKafkaResponse, res);
|
|
||||||
|
|
||||||
// TODO: FIXME: implements it.
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<string> srs_kafka_array2vector(SrsKafkaArray<SrsKafkaString>* arr)
|
||||||
|
{
|
||||||
|
vector<string> strs;
|
||||||
|
for (int i = 0; i < arr->size(); i++) {
|
||||||
|
}
|
||||||
|
return strs;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -666,7 +666,7 @@ public:
|
||||||
*/
|
*/
|
||||||
class SrsKafkaTopicMetadataResponse : public SrsKafkaResponse
|
class SrsKafkaTopicMetadataResponse : public SrsKafkaResponse
|
||||||
{
|
{
|
||||||
private:
|
public:
|
||||||
SrsKafkaArray<SrsKafkaBroker> brokers;
|
SrsKafkaArray<SrsKafkaBroker> brokers;
|
||||||
SrsKafkaArray<SrsKafkaTopicMetadata> metadatas;
|
SrsKafkaArray<SrsKafkaTopicMetadata> metadatas;
|
||||||
public:
|
public:
|
||||||
|
@ -741,6 +741,36 @@ public:
|
||||||
* @param pmsg output the received message. user must free it.
|
* @param pmsg output the received message. user must free it.
|
||||||
*/
|
*/
|
||||||
virtual int recv_message(SrsKafkaResponse** pmsg);
|
virtual int recv_message(SrsKafkaResponse** pmsg);
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* expect specified message.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
int expect_message(T** pmsg)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
SrsKafkaResponse* res = NULL;
|
||||||
|
if ((ret = recv_message(&res)) != ERROR_SUCCESS) {
|
||||||
|
srs_error("recv response failed. ret=%d", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// drop not matched.
|
||||||
|
T* msg = dynamic_cast<T*>(res);
|
||||||
|
if (!msg) {
|
||||||
|
srs_info("kafka drop response.");
|
||||||
|
srs_freep(res);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pmsg = msg;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -757,9 +787,12 @@ public:
|
||||||
/**
|
/**
|
||||||
* fetch the metadata from broker for topic.
|
* fetch the metadata from broker for topic.
|
||||||
*/
|
*/
|
||||||
virtual int fetch_metadata(std::string topic);
|
virtual int fetch_metadata(std::string topic, SrsKafkaTopicMetadataResponse** pmsg);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// convert kafka array[string] to vector[string]
|
||||||
|
extern std::vector<std::string> srs_kafka_array2vector(SrsKafkaArray<SrsKafkaString>* arr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -997,7 +997,7 @@ public:
|
||||||
* for example:
|
* for example:
|
||||||
* SrsCommonMessage* msg = NULL;
|
* SrsCommonMessage* msg = NULL;
|
||||||
* SrsConnectAppResPacket* pkt = NULL;
|
* SrsConnectAppResPacket* pkt = NULL;
|
||||||
* if ((ret = server->expect_message<SrsConnectAppResPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
* if ((ret = server->expect_message<SrsConnectAppResPacket>(&msg, &pkt)) != ERROR_SUCCESS) {
|
||||||
* return ret;
|
* return ret;
|
||||||
* }
|
* }
|
||||||
* // use then free msg and pkt
|
* // use then free msg and pkt
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue