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 多语言混合微服务异构的更多相关文章

  1. 谈谈surging 与多语言混合微服务构思

    1.前言 微服务架构已成为目前互联网架构的趋势,关于微服务的讨论,几乎是各大技术论坛.技术大会的热门话题.而Surging是高性能的模块化微服务引擎,是大家首选微服务引擎架构之一,而针对于框架有个突出 ...

  2. surging 微服务引擎 2.0 会有多少惊喜?

    surging 微服务引擎从2017年6月至今已经有两年的时间,这两年时间有多家公司使用surging 服务引擎,并且有公司搭建了CI/CD,并且使用了k8s 集群,这里我可以说下几家公司的服务搭建情 ...

  3. 基于.NET CORE微服务框架 -浅析如何使用surging

    1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...

  4. 从成本角度看Java微服务

    近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...

  5. Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

  6. 基于 Docker 的微服务架构实践

    本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...

  7. 深入理解SpringCloud与微服务构建

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81742534 目录 一.SpringClou ...

  8. springcloud微服务 总结一

    一 什么是微服务 译文: 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机 ...

  9. Re:从0开始的微服务架构:(一)重识微服务架构--转

    原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...

  10. 【CHRIS RICHARDSON 微服务系列】微服务架构中的进程间通信-3

    编者的话 |本文来自 Nginx 官方博客,是微服务系列文章的第三篇,在第一篇文章中介绍了微服务架构模式,与单体模式进行了比较,并且讨论了使用微服务架构的优缺点.第二篇描述了采用微服务架构的应用客户端 ...

随机推荐

  1. vue项目,关闭eslint语法检测

    vue.config.js文件中 module.exports = { lintOnSave:false //关闭语法检查 } 然后重启项目生效!

  2. 取cookie时报错“[object Object]“ is not valid JSON

    做谷粒学苑项目时,在保存登录状态环节出现该问题 取cookie时老师强调要使用JSON.pase()解析cookie为json对象 var userStr = cookie.get("gul ...

  3. Unity最新一键清理Prefab中所有MissingComponent

    因为老的API  Properties.DeleteArrayElementAtIndex(propertyIndex);提示没权限修改, 而unity提供了新的API  GameObjectUtil ...

  4. 学习Source Generators之从swagger中生成类

    前面学习了一些Source Generators的基础只是,接下来就来实践一下,用这个来生成我们所需要的代码. 本文将通过读取swagger.json的内容,解析并生成对应的请求响应类的代码. 创建项 ...

  5. Jetpack Compose(4)——重组

    目录 一.状态变化 1.1 状态变化是什么 1.2 mutableStateListOf 和 mutableStateMapOf 二.重组的特性 2.1 Composable 重组是智能的 2.2 C ...

  6. 在Keycloak中实现多租户并在ASP.NET Core下进行验证

    Keycloak是一个功能强大的开源身份和访问管理系统,提供了一整套解决方案,包括用户认证.单点登录(SSO).身份联合.用户注册.用户管理.角色映射.多因素认证和访问控制等.它广泛应用于企业和云服务 ...

  7. C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

    C 语言中的用户输入 您已经学习了 printf() 函数用于在 C 语言中输出值. 要获取用户输入,可以使用 scanf() 函数: // 声明一个整数变量,用于存储我们从用户那里获得的数字 int ...

  8. 如何用vsftpd实现用户不同权限:只能下载,可上传,管理权限等 [仅供参考未亲测]

    如何用vsftpd实现用户不同权限:只能下载,可上传,管理权限等  2007-01-29 10:20:09 分类: LINUX 前提条件:       必须安装包:vsftpd-2.0.1-5     ...

  9. c# MVC BundleConfig详解

    前言 因为有很多库在.net core还没有实现迁移,所以呢,我们有时候还是需要的. 这些事什么意思呢? 举一个例子: bundles.Add(new StyleBundle("~/Cont ...

  10. node require 运行步骤

    前言 准备整理node 系列,先把一些基础含义放出来. 在学习node 的时候我们一般加载模块都是require,那么require 是如何运行的呢? 正文 通常,在Node.js里导入是通过 req ...