springcloud sidecar 实现C语言调用语言模块
以前对springcloud的印象停留在大项目功能模块的独立、负载均衡、熔断等功能。这次项目接触了另一个用法,多语言异构。以前Java调C都是用的JNA或者JNI,这次C调Java用了springcloud sidecar模块来实现。所以记录一下,有相同需求的可以交流下。
Sidecar模式翻译过来挎斗模式(或边车模式),挎斗是如下一种摩托车。非Java语言功能相当于A部分,运行在一个端口上,sidercar相当于B部分,会监听A服务的端口,且sidercar会通过配置被springcloud服务发现与注册机制识别。需要注意的是A和B必须部署在同一台主机上。
每个非Java语言服务对应一个sidecar服务,通过访问sidecar服务来调用微服务中的其他服务。无需知晓被调用服务的IP和端口,只需要知道该服务在注册中心的服务名即可。
Demo
软件
IDEA 2022.3.1
Nacos 1.4.1
python 3.6
1.启动Nacos服务发现注册;
Win+R 进入dos命令,转到nacos安装目录,运行启动命令:.\startup.cmd -m standalone ,会出现nacos图标,跑起来后根据打印日志访问对应地址,用户名密码均为nacos,登录即可。如果,访问网址为 http://192.168.244.1:8848/nacos/index.html 。
2.启动一个微服务提供者;
pom.xml中要引入nacos和ribbon。
Application.yml配置文件中要指定本服务端口及服务名,nacos相关信息等
启动类加入注解
定义restful风格controller类
启动服务后可以访问网址 http://localhost:8080/test 进行测试
3.启动多语言微服务sidecar;
Pom.xml中引入sidecar相关jar包;
Application.yml中配置服务端口、服务名、nacos相关信息及sidecar信息
启动类加上@EnableDiscoveryClient注解,启动。访问nacos地址可以看到启动了两个服务
4.启动非Java语言服务(本示例用的python语言)。
需要指定运行端口,且该端口须与sidecar配置端口一致。
通过 http://localhost:8070(sidecarIP:端口)/被访问服务名称/被访问方法 的方式访问
通过访问非Java语言服务网址可直接调用显示另一Java语言微服务方法内容。本示例访问地址为 http://192.168.2.110:8060/callJavaService