brpc
brpc copied to clipboard
brpc channel 能否支持绑定client ip
Is your feature request related to a problem?
Describe the solution you'd like
我的机器上有多个ip地址(多个网卡)我希望控制brpc的channel发送rpc请求的时候,只通过指定的ip进行发送,目前看channelOptions里面并没有提供这个选项
这个功能可以被支持吗
Describe alternatives you've considered
Additional context/screenshots
这里有个示例,每个client channel初始化时传入不同的ip是不是就能解决了
#include <brpc/channel.h>
#include <brpc/controller.h>
int main() {
brpc::Channel channel1;
brpc::Channel channel2;
brpc::ChannelOptions options;
// 方式1:直接传入多个 IP:Port(用逗号分隔)
std::string ip1 = "192.168.1.10:8080";
if (channel1.Init(ip1.c_str(), "rr", &options) != 0) {
LOG(ERROR) << "Fail to init channel";
return -1;
}
std::string ip2 = "10.0.0.10:8080";
if (channel2.Init(ip2.c_str(), "rr", &options) != 0) {
LOG(ERROR) << "Fail to init channel";
return -1;
}
// 后续正常使用 Stub 调用
YourService_Stub stub1(&channel1);
YourRequest req1;
YourResponse res1;
brpc::Controller cntl1;
stub1.YourMethod(&cntl1, &req1, &res1, nullptr);
YourService_Stub stub2(&channel2);
YourRequest req2;
YourResponse res2;
brpc::Controller cntl2;
stub2.YourMethod(&cntl2, &req2, &res2, nullptr);
return 0;
}
这里有个示例,每个client channel初始化时传入不同的ip是不是就能解决了
#include <brpc/channel.h> #include <brpc/controller.h> int main() { brpc::Channel channel1; brpc::Channel channel2; brpc::ChannelOptions options; // 方式1:直接传入多个 IP:Port(用逗号分隔) std::string ip1 = "192.168.1.10:8080"; if (channel1.Init(ip1.c_str(), "rr", &options) != 0) { LOG(ERROR) << "Fail to init channel"; return -1; } std::string ip2 = "10.0.0.10:8080"; if (channel2.Init(ip2.c_str(), "rr", &options) != 0) { LOG(ERROR) << "Fail to init channel"; return -1; } // 后续正常使用 Stub 调用 YourService_Stub stub1(&channel1); YourRequest req1; YourResponse res1; brpc::Controller cntl1; stub1.YourMethod(&cntl1, &req1, &res1, nullptr); YourService_Stub stub2(&channel2); YourRequest req2; YourResponse res2; brpc::Controller cntl2; stub2.YourMethod(&cntl2, &req2, &res2, nullptr); return 0; }
channel这里指定的ip地址,是指定rpc server的服务地址吧,我想要的是,在client机器有多个ip(网卡)的情况下控制channel发送rpc时候使用的本地ip地址
channel这里指定的ip地址,是指定rpc server的服务地址吧,我想要的是,在client机器有多个ip(网卡)的情况下控制channel发送rpc时候使用的本地ip地址
这个目前还不支持。能否在系统层面设置路由解决?比如设置访问某些server ip时,本地走某个网卡/ip。如:
# 访问 192.168.100.0/24 网段时,通过 eth1 网卡,使用网关 192.168.2.1
sudo ip route add 192.168.100.0/24 via 192.168.2.1 dev eth1