Anno 讓微服務、混合編程更簡單(Net love Java)


  在社區或者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 }
View Code

更多關於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。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM