在社区或者QQ群我们经常看到有人争辩编程语言的好坏,只要一提起这个话题常常就能引来很多人参与,往往最后就变成了一群人几个小时的骂战。今天我们要说的是如何让Java和.Net(甚至更多语言)相结合。充分发挥其优势扬长避短。

1、Anno是什么?

  Anno是一个微服务框架引擎。入门简单安全稳定高可用全平台可监控、依赖第三方框架少。底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项目验证过的跨语言的thrift grpc。 自带服务注册发现健康检查(不依赖于Etcd、Consul、Zookeeper)、调用链追踪、Cron 调度、限流、事件总线等等。

2、Java和.Net 混合开发 

  Java的生态很强大,但是他的语法也常常让人诟病。提起.Net经常有人说他不能跨平台(其实早期.net 可以借助Mono跨平台,并且在多个领域取得了不可磨灭的成绩),国内生态不好。随着.net core 的出现和前段时间.Net5的发布,让.net 跨平台更容易。并且.net 有着超高的性能、优雅的语法等等很多方面被人称赞。在编程语言百花齐放的今天,我们需要扬长避短利用不同编程语言各自的优势为我们提供更好的服务。就在这种场景下我们推出了 Anno微服务框架,让微服务、跨语言混合开发变的更简单更容易。 

  Anno调用方(Client)无需知道服务提供方(Provider)的地址端口开发语言等等信息因此我们在开发过程中对于我们需要的服务我们只管通过Client SDK调用,无需关注细节。这样我们也避免了在多语言开发的微服务中带来的各种奇葩问题。

  下图是一个在线体验的环境:http://140.143.207.244/

  Java服务的资源监控

  .Net服务的资源监控(运行时长、内存、CPU、硬盘、访问量)

  我们来看一下从网关(.NET5.0实现)访问Java服务:

  java端功能开发实例代码:

 1 package anno.componentservice;
2
3 import anno.componentservice.Models.UserInfo;
4 import anno.componentservice.events.UserEvent;
5 import anno.configuration.AnnoTheadPool;
6 import anno.entities.SysMember;
7 import anno.repository.SysMemberMapper;
8 import anno.thrift.annotation.AnnoInfo;
9 import anno.thrift.module.ActionResult;
10 import anno.thrift.module.BaseModule;
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.context.ApplicationEventPublisher;
13 import org.springframework.stereotype.Service;
14
15 import javax.annotation.Resource;
16 import java.util.HashMap;
17 @Service
18 //@Scope("prototype")
19 public class UserInfoModule extends BaseModule {
20 @Autowired
21 private ApplicationEventPublisher publisher;
22 @Autowired
23 private SysMemberMapper sysMemberMapper;
24 @AnnoInfo(desc = "用户信息")
25 public ActionResult<Object> GetUserInfo(GetUserInfoRequestDto queryInput){
26 UserInfo userinfo=new UserInfo();
27 userinfo.setAge(18);
28 userinfo.setName("Tom");
29 HashMap<String,Object> output=new HashMap<String, Object>();
30 output.put("key1","value1");
31 output.put("key2","value2");
32 for(HashMap.Entry<String,Object> kv:output.entrySet()){
33 output.put(kv.getKey(),kv.getValue());
34 }
35 HashMap<String,Object> outputData=new HashMap<String, Object>();
36 outputData.put("queryInput",queryInput);
37 outputData.put("userinfo",userinfo);
38 String msg= "this message from Java Server UserInfoModule.";
39 return new ActionResult<Object>(true, outputData, output, msg);
40 }
41 @AnnoInfo(desc = "你好世界")
42 public ActionResult<Object> HelloWorld(@AnnoInfo(desc = "名称",name = "name",required = false,defaultValue = "Anno Default Value") String anno){
43 String greetings="Hello "+anno+" I am Anno!";
44 return new ActionResult<>(true,greetings);
45 }
46 public void PublishMsg(String name){
47 if(name==null){
48 name="Anno";
49 }
50 UserEvent uv=new UserEvent();
51 uv.setId(10010);
52 uv.setName(name);
53 /**
54 * 线程池方式发布事件
55 */
56 AnnoTheadPool.getPool().execute(()->{
57 publisher.publishEvent(uv);
58 });
59 /**
60 * 发布事件异步 创建线程
61 */
62 // new Thread(()->{
63 // publisher.publishEvent(uv);
64 // }).start();
65 /**
66 * 直接发布事件 同步
67 */
68 // publisher.publishEvent(uv);
69 }
70
71 @AnnoInfo(desc = "根据ID获取用户信息")
72 public ActionResult<SysMember> GetUserAutowired(long id) {
73 SysMember member=sysMemberMapper.selectById(id);
74 return new ActionResult<>(true,member);
75 }
76 }

更多关于Java和.NET的混合开发的详情,请移步到GitHub查看

学习交流 QQ群:478399354 ,到这里我们互为师长相互学习。

Anno核心源码:https://github.com/duyanming/Anno.Core  

Java实现:https://github.com/duyanming/anno.thrift-parent

Viper示例项目:https://github.com/duyanming/Viper  

体验地址:http://140.143.207.244/Home/Login

文档地址:https://duyanming.github.io/

关于Anno的更多内容,随后更新。敬请关注。开源不易,感谢Star。

Anno 让微服务、混合编程更简单(Net love Java)的更多相关文章

  1. NET Core微服务之路:简单谈谈对ELK,Splunk,Exceptionless统一日志收集中心的心得体会

    前言 日志,一直以来都是开发人员和运维人员最关心的问题.开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐患,故障等定位问题.如果你的系统中没有日志,就像一个断了线的风筝,你永远不知道 ...

  2. 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单

    一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...

  3. 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

  4. [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

  5. 四、C# 5.0 新特性——Async和Await使异步编程更简单

    一.引言 .NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就 ...

  6. 看完这篇微服务架构设计思想,90%的Java程序员都收藏了

    本博客强烈推荐: Java电子书高清PDF集合免费下载 https://www.cnblogs.com/yuxiang1/p/12099324.html 微服务 软件架构是一个包含各种组织的系统组织, ...

  7. (转)微服务_创建一个简单的Eureka注册中心

    原文地址:https://www.cnblogs.com/lplshermie/p/9105329.html 微服务和分布式已经成了一种极其普遍的技术,为了跟上时代的步伐,最近开始着手学习Spring ...

  8. Swift让编程更简单 人人都是开发者

    全称为苹果全球开发者大会的WWDC,每年的这个时候,都会如这段时间前后所举行的Google I/O 和微软的BUILD开发者会议一样,吸引全球科技媒体的目光.近几年来,因为在会上爆的猛料越来越多,“开 ...

  9. C# 5.0 新特性——Async和Await使异步编程更简单

    http://www.cnblogs.com/zhili/archive/2013/05/15/csharp5asyncandawait.html http://blog.zhaojie.me/201 ...

随机推荐

  1. Window常用账号密码修改(Git)

    问题 remote: Incorrect username or password ( access token ) 原因 账号已经密码不争取导致的 解决问题 进入控制面板 (控制面板\用户帐户\凭据 ...

  2. DDD(领域驱动设计)--战略设计

    领域 领域是一个组织所做的事情以及其中所包含的一切.商业机构通常会确定一个市场,然后在这个市场中销售产品和服务.每个组织都有它自己的业务范围和做事方式. 领域就是解决一个特定范围内的业务问题. 如何分 ...

  3. tp5 统一返回json格式

    控制器调用 public function json(){ if (request()->isPost()) { return jsonData(1,'转换成功',数据(可不填)); } } 公 ...

  4. Linux学习 - 02 使用 - Centos8 - 网络配置相关

    『Centos8 网络配置』 题外话:最近太忙,利用仅有的周末空闲时间记录点东西,草率了. 问题1:安装 Centos8.2 minimal 过程中,只是设置了 WiFi的静态IP,没有进行[以太网] ...

  5. 你也想当流量UP主?那就点开看看吧!

    2009年6月份,哔哩哔哩(B站)在一众期待中诞生,它汇聚了天南海北当时小众的二次元同好,它也存在诸多不足,大家亲切地叫它"小破站". 而如今,它成长为一棵枝繁叶茂的参天大树,成为 ...

  6. 用思维导图软件MindManager整理假期

    今天带大家使用MindManager2020软件构建出2020年的节假日思维导图. 既然是做2020年的节假日思维导图,那么有个MindManager技巧就是,关于这一类思维导图我们都可以选择时间线导 ...

  7. Java数据结构(七)—— 排序算法

    排序算法(Sort Algorithm) 排序算法介绍和分类 将一组数据,依指定顺序进行排列 排序的分类 内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序 外部排序 数据量过大,无法全部加 ...

  8. P3694 邦邦的大合唱站队 题解

    \( 数据范围暗示状压,爪巴. \\ 首先考虑状态量. \\ 我们设计一个关于乐队数量的状态 S, 代表排列好的乐队.\\ \) eg: if(Set_排列好的队列 = {1, 2, 5}) then ...

  9. 测试:DOCX

    先拿到的是需求文档和接口文档以及测试用例模块,[以及之前写好的测试用例]再根据分配的任务进行编写用例 [智能看懂业务需求]现有功能点,在编写用例 [项目介绍]: 辽阳农商惠生活项目是作为一个农户和银行 ...

  10. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...