如何实现surging 多语言混合微服务异构
1. 背景
作为微服务体系, 应该是不限语言的, 不管是.net、java
, 都可以是一个微服务. 可以使用JAVA或者.NET 去实现业务模块,通过统一的消息模型进行传输调用
因客户技术栈以多语言,多元化发展,语言包含了Java、.NET语言,并且要支持不同业务场景需要,所以surging必然要实现多语言混合微服务异构,并且支持多协议扩展以便支持不同业务场景,那么将通过几篇文章来介绍surging 如何实现JAVA微服务以便支持多语言混合。
组件
目前JAVA微服务引擎实现了以下组件:
skywalking探针:以便支持.net和java 链路追踪
rpc组件:基于netty远程调用组件
Messagepack组件:以便支持.net和java基于messagepack 编解码
Json组件:以便支持.net和java基于json编解码,JAVA使用的是gson, .net使用的是Newtonsoft.Json
注册中心组件:实现基于zookeeper,consul 的注册中心,可以支持兼容.net和java服务注册、服务发现、服务治理。
服务引擎构建组件:以便实现服务配置,组件注入。
使用入门
基于java写个简单的服务接口
1 2 3 4 5 | @ServiceBundle (RouteTemplate = "api/{Service}" ) public interface IHelloService extends IServiceKey { @Command (CircuitBreakerForceOpen = false ,ShuntStrategy = AddressSelectorMode.RoundRobin, Strategy = StrategyType.Failover, RequestCacheEnabled = false , InjectionNamespaces = {}, BreakerForceClosed = false , FallBackName = "" ) String Say(String name) throws IOException, InterruptedException, KeeperException; } |
基于java写个 简单的服务实现
1 public class HelloService extends ServiceBase implements IHelloService { 2 3 @Inject 4 private IServiceProxyProvider serviceProxyProvider; 5 6 public String Say(String name) throws IOException, InterruptedException, KeeperException { 7 8 HashMap<String, Object> model = new HashMap<>(); 9 model.put("name", "fanly"); 10 String path = "api/manager/say"; 11 12 String result = serviceProxyProvider.Invoke(model, path, null); 13 return result; 14 // return name+":say hello"; 15 } 16 }
C# 通过以下代码就能调用以上JAVA服务
1 Dictionary<string, object> model = new Dictionary<string, object>(); 2 model.Add("name", name); 3 string path = "api/hello/say"; 4 5 string result =await _serviceProxyProvider.Invoke<string>(model, path, null);
以下通过swagger 调用JAVA服务返回的结果
SkyWalking链路追踪:
总结
surging 将继续为企业服务,后期会支持升级支持skywalking8.0+和支持扩展haproxy, rtmp 多媒体推送服务。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义