nacos不同局域网如何相互调用?nacos微服务云开发,远程联调部署,内网穿透,frp部署

1、 场景

最近每个人都在家办公,公司项目是微服务的,一个人负责一个小服务,而且每个人都不在同一个局域网内,公司有一个云服务器(部署nacos),一开始大家都把自己负责的服务都注册到nacos上(作为服务注册和服务发现已经配置中心),大家都能注册,当前端人员来联调的时候出问题了,由于网关也是其中一个局域网注册上去的,前端人员需要通过网关来调取各个服务,但是网关是局域网,怎么办?这个简单,我们把注册网关的本地服务做一个内网穿透不就可以了,开始干。。。

2、内网穿透映射网关端口

通过一整捣鼓,注册网关的同事成功把他本地的网关端口映射到域名上面了,前端同事可以通过该域名成功访问到网关,但是很快新的问题出现了,当前端同事访问订单服务想获取订单信息时,访问不到,但是负责订单服务的同事已经把订单服务注册到云服务的nacos上去了,而且可以保证服务没有问题。
原来网关服务和订单服务不在同一个局域网内,网关服务和订单服务是不互通的,因为服务注册到nacos上面时是自动获取本地的内网ip作为服务发现的地址的,那么另一个服务去访问这个局域网地址肯定是不通的,那怎么办呢?想办法。。。

3、nacos不同局域网内的服务怎么互通相互调用?

第一想法还是内网穿透,只有把所有局域网的服务都通过内网穿透的方式映射出去,让外网能够访问才可以。通过查看nacos官网的配置参数,终于找到了突破口。
在服务注册时配置服务发现的ip和port,也就是访问服务时的ip和端口,具体配置内容:
在这里插入图片描述上图的ip和port就是我们重点需要配置的内容,服务发现是通过这个ip和端口访问我们服务的,如果这两项不配置,服务注册时会自动获取我们的局域网ip作为服务发现的ip。
既然知道怎么解决了,那就简单了,我们只要想办法让外网都能够访问到这个ip就可以了。
回过头来还是内网穿透。。。。。

4、ngrok 内网穿透

在百度上上了很久,很多种内网穿透,都是将本地的某个端口映射到域名上面,但是我们需要的是一个外网能够访问的ip和端口,显然这样不满足我们的需求。当然用域名也可以,一开始没有找到frp时,我就考虑用域名的方式,配置如下即可:
在这里插入图片描述weisn.4kb.cn 是我内网穿透的域名,域名映射的端口是我服务的端口7803
在这里插入图片描述以上是我通过 ngrok 内网穿透将我的服务端口映射到我的域名上面去,这样其他服务访问我这个服务时,就可以通过这个域名访问到我了。
但是这样不好的一个地方就是每个服务都需要有一个内网穿透的域名,不过这个也是成本最低的,个人没有云服务器公网ip也能用。

5、frp内网穿透

接下来我们开始用frp内网穿透,通过一个公网ip 和端口的配置,映射到我们不同的局域网,使不同的局域网都在同一个公网ip内互通。

条件:需要有一个公网ip,不要求配置,稳定就好

(1)frp下载安装

https://github.com/fatedier/frp/releases
在开源社区下载frp资源
在这里插入图片描述点击 Assets 展开

在这里插入图片描述由于我的云服务是linux,我本地是Windows所以我要下载对应的两个版本。
不管是linux还是Windows都需要注意系统的位数。Windows怎么看位数我就不讲了,这是每个程序员都应该知道的。

linux查看系统内核版本
getconf LONG_BIT

在这里插入图片描述

(2)linux上安装frp内网穿透服务端

可以先下载到自己电脑,然后上传到linux系统上解压,或者使用linux命令直接在linux上下载:
可以通过右击复制连接加上命令 wget 下载

wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_amd64.tar.gz

在这里插入图片描述在这里插入图片描述

解压
tar -xvf frp_0.43.0_linux_amd64.tar.gz

重命名为frp,然后cd 进frp目录
你会看见有frps 和frpc 两种文件,frps就是服务端文件,frpc 就是客户端的文件,因为我们这里是部署服务端,所以为了不混淆你可以把frpc相关的文件删了。下面是我删了之后剩余的服务端相关的文件。
在这里插入图片描述可以进入frps.ini 文件看一下,新版本里面配置很简单,就两行代码。
在这里插入图片描述7000 就是frp服务端的端口,客户端来连接时就是连接这个端口,可以任意改,这里我们就默认不改了。

启动frp服务端
    nohup ./frps -c ./frps.ini &

nohup 是日志文件,frps是服务端的启动文件,frps.ini 是服务端的配置文件,& 代表后台运行
在这里插入图片描述如上图说明启动成功,这里我已经配置几个客户端的监听端口
至此,linux服务端安装frp已经启动完成。

(3)Windows 安装frp客户端

下载好之后直接解压,解压后的目录如下
在这里插入图片描述其实文件和linux的一样,但是这里我们只是安装客户端,也就是frpc相关的文件,我们可以把服务端相关的文件删了,最后是这样的。
在这里插入图片描述我们可以用记事本打开frpc.ini文件看一下

在这里插入图片描述一开始是这样的,下面解读一下各个配置的含义
[common]
server_addr: 这个就是我们公网ip的地址,默认是127.0.0.1,我们需要换成我们公网ip一致,
server_port:这个是我们公网监听的端口,也就是我们linux上面启动frps时监听的端口,这里默认是7000,如果我们启动frp服务端时没有修改这里也就不用改了。
[ssh]
type:连接类型有tcp,http,https,udp等。
local_ip:本地ip
local_port:监听的本地端口
remote_port: 服务器的端口,ssh连接时的端口,例如:这里是6000,我们访问公网ip+6000,就会访问到我们本地的local_port端口上。
默认配置:

[common]
server_addr = 127.0.0.1
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
启动frp 客户端

这里启动不能直接双击frpc.exe启动,而是通过cmd控制台进到这个目录下面,
在这里插入图片描述这样我们Windows安装frp客户端和启动就好了。
这样我们访问公网ip+6000端口是不是就可以访问我们本地的22端口了呢?
答案是还不能,因为你服务器还没有放开相关的端口,我们只要进到服务器的控制台,放开相关的端口即可。
在这里插入图片描述7000端口是一定要放开的,也就是你的frps启动监听的端口,如果你改了就放开对应的端口即可,同时还要放开你客户端监听的转发端口,也就是上面我们说的remote_port 配置的端口,默认是6000。
我这里放开我们本地服务所有的端口。
如果你服务器内有开防火墙的记得也放开相应的端口。

到这里,整个frp内网穿透就可以了。接下来我们就要配置我们nacos微服务的各个服务ip和地址了。

6、nacos通过frp配置不同局域网互通相互调用

谁负责哪个服务,谁就启动frp客户端监听他本地的端口,我这里启动了下面这些服务
在这里插入图片描述7800 是我的网关端口,我在服务器上面也放开了7800端口,
这样当前端的同事访问服务器的7800端口时,服务器就会转发到我们本地的7800端口,这样就可以进我的网关服务了,那么项目里面的网关服务注册配置怎么配置呢?
在这里插入图片描述port配置的是frp的remote_port端口。

这样我们启动项目注册到nacos上面之后,服务的ip和端口就变成我们这是的公网ip和端口了,当其他服务或者前端同事访问这个公网ip和端口时就会访问到我们本地的服务了
在这里插入图片描述
好了,今天的内容就到了,有什么不懂的可以随时私我,有不对的地方欢迎指点修改。

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Nacos和Dubbo都是阿里巴巴开源的项目,Nacos是一款基于云原生架构的动态服务发现、配置管理和服务管理平台,而Dubbo是一款高性能的分布式服务框架。 在使用Nacos和Dubbo进行服务调用时,需要使用Nacos提供的服务发现功能来获取可用的Dubbo服务,然后使用Dubbo提供的RPC框架进行远程调用。 下面是一个使用Nacos和Dubbo进行服务调用的客户端实现示例: 1. 添加依赖 在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> ``` 其中,${nacos.version}和${dubbo.version}需要根据您使用的版本进行替换。 2. 配置Nacos客户端 在使用Nacos之前,需要先配置Nacos客户端。可以在application.properties文件中添加以下配置: ```properties # Nacos配置 spring.cloud.nacos.config.server-addr=localhost:8848 spring.cloud.nacos.config.namespace= spring.cloud.nacos.config.file-extension=properties # Dubbo配置 dubbo.registry.address=nacos://localhost:8848 ``` 其中,spring.cloud.nacos.config.server-addr为Nacos服务器地址,dubbo.registry.address为Dubbo注册中心地址。 3. 获取Dubbo服务 使用Nacos提供的服务发现功能,获取可用的Dubbo服务。可以在代码中添加以下方法: ```java public List<Invoker<?>> getDubboService(String serviceName) throws NacosException { // 创建Nacos服务发现客户端 NamingService namingService = NacosFactory.createNamingService(nacosProperties.getConfigServerAddr()); // 获取可用的Dubbo服务 List<Instance> instances = namingService.getAllInstances(serviceName); if (instances == null || instances.isEmpty()) { throw new RuntimeException("No available Dubbo service"); } // 将Dubbo服务转换为Invoker List<Invoker<?>> invokers = new ArrayList<>(); for (Instance instance : instances) { URL url = new URL("dubbo", instance.getIp(), instance.getPort(), serviceName); Invoker<?> invoker = new DubboInvoker<Object>(Object.class, url, new RpcClientWrapper()); invokers.add(invoker); } return invokers; } ``` 其中,serviceName为Dubbo服务名称。 4. 远程调用Dubbo服务 获取到可用的Dubbo服务之后,就可以使用Dubbo提供的RPC框架进行远程调用。可以在代码中添加以下方法: ```java public Object invokeDubboService(List<Invoker<?>> invokers, String methodName, Object... args) throws RpcException { // 创建Dubbo调用上下文 RpcContext rpcContext = RpcContext.getContext(); // 随机选择一个Dubbo服务 Invoker<?> invoker = invokers.get(new Random().nextInt(invokers.size())); // 设置Dubbo调用上下文 rpcContext.setInvoker(invoker); rpcContext.setMethodName(methodName); rpcContext.setArguments(args); // 远程调用Dubbo服务 Result result = invoker.invoke(new RpcInvocation(methodName, new Class<?>[0], args)); if (result.hasException()) { throw result.getException(); } return result.getValue(); } ``` 其中,invokers为获取到的Dubbo服务列表,methodName为Dubbo服务方法名,args为Dubbo服务方法参数。 使用以上方法,就可以在Nacos和Dubbo的帮助下,轻松实现服务调用客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值