如何实现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写个简单的服务接口
@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 多媒体推送服务。
如何实现surging 多语言混合微服务异构的更多相关文章
- 谈谈surging 与多语言混合微服务构思
1.前言 微服务架构已成为目前互联网架构的趋势,关于微服务的讨论,几乎是各大技术论坛.技术大会的热门话题.而Surging是高性能的模块化微服务引擎,是大家首选微服务引擎架构之一,而针对于框架有个突出 ...
- surging 微服务引擎 2.0 会有多少惊喜?
surging 微服务引擎从2017年6月至今已经有两年的时间,这两年时间有多家公司使用surging 服务引擎,并且有公司搭建了CI/CD,并且使用了k8s 集群,这里我可以说下几家公司的服务搭建情 ...
- 基于.NET CORE微服务框架 -浅析如何使用surging
1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...
- 从成本角度看Java微服务
近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 深入理解SpringCloud与微服务构建
旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81742534 目录 一.SpringClou ...
- springcloud微服务 总结一
一 什么是微服务 译文: 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机 ...
- Re:从0开始的微服务架构:(一)重识微服务架构--转
原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...
- 【CHRIS RICHARDSON 微服务系列】微服务架构中的进程间通信-3
编者的话 |本文来自 Nginx 官方博客,是微服务系列文章的第三篇,在第一篇文章中介绍了微服务架构模式,与单体模式进行了比较,并且讨论了使用微服务架构的优缺点.第二篇描述了采用微服务架构的应用客户端 ...
随机推荐
- SQLServer递归触发器在KES中的一次改造分析
文章概要: 某项目将数据从 SQLSERVER 迁移到 KES.其中SQLSERVER中触发器用到了 TRIGGER_NESTLEVEL() 函数,KES并不能直接支持该函数. 起初在分析该问题时想复 ...
- kingbaseES V8R6 备份恢复案例 -- sys_rman备份“DSO support..."故障
案例说明: 在通过sys_rman执行备份时,出现"DSO support...."错误,如下图所示: sys_log日志: 适用版本: KingbaseES V8R6 一.问题分 ...
- java实战字符串4:寻找最长的元音子串的长度
题目描述 定义:当一个字符串只有元音字母(aeiouAEIOU)组成,称为元音字符串.现给定一个字符串,请找出其中最长的元音字符子串,并返回其长度:如果找不到,则返回0. 子串:字符串中任意个连续的字 ...
- spring中的bean对象的有关了解
@Configuration public class AppConfig { @Bean public MyBean getMyBean() { MyBean myBean = new MyBean ...
- #dfs,trie#洛谷 4341 [BJWC2010]外星联络
题目 分析 首先时间复杂度\(O(n^2)\)可过,统计子串个数可以用trie或者更高级的方法 可以枚举所有的后缀,然后建一个trie,这样这个trie就可以记录全部的子串 关于字典序排序,深搜的时候 ...
- #前缀和,后缀和#洛谷 4280 [AHOI2008]逆序对
题目传送门 分析 首先填的数字单调不降,感性理解 那可以维护\([a_1\sim a_{i-1}]\)的\(cnt\)后缀和以及 \([a_{i+1}\sim a_n]\)的\(cnt\)前缀和,那可 ...
- #排列组合,容斥#洛谷 5684 [CSPJX2019]非回文串
题目 分析 那显然就是\(n!\)减去回文串的方案数 首先如果有超过一个出现奇数次字母那肯定不存在回文串 如果有且仅有一个首先要在次数中选择一个然后其它当偶数处理 偶数那就是首先字母位置选好但顺序可以 ...
- #计数,记忆化搜索#C 连边方案
分析 设\(dp[i][j][k][l]\)表示处理到\([i-l+1,i]\)的连边,二进制状态(奇点还是偶点)为\(k\)的方案数, 最后一维是为了避免算重,那么如果第\(i-l+1\)位是偶点可 ...
- Docker学习路线12:开发者体验
到目前为止,我们只讨论了使用Docker来部署应用程序.然而,Docker也是一个极好的用于开发应用程序的工具.可以采用一些不同的建议来改善开发体验. 在应用程序中使用docker-compose以方 ...
- Go 语言中 For 循环:语法、使用方法和实例教程
for循环用于多次执行特定的代码块,每次都可以使用不同的值.每次循环执行都称为一次迭代.for循环可以包含最多三个语句: 语法 for 语句1; 语句2; 语句3 { // 每次迭代要执行的代码 } ...