zoukankan      html  css  js  c++  java
  • 如何实现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 多媒体推送服务。

  • 相关阅读:
    Python编程-数据库
    Django框架之自定义分页
    Python编程-多线程
    Python编程-多进程二
    慕课学习--OSI与TCP/IP网络协议
    VMwaretools、共享文件夹、全屏
    Linux--慕课学习
    随想
    Linux--初次体验
    正则表达式——初次尝试
  • 原文地址:https://www.cnblogs.com/fanliang11/p/14517021.html
Copyright © 2011-2022 走看看