8.1 集成Java

8.1 集成JavaProvider#

8.1.1、Anno是什么?#

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

8.1.2、Java和.Net 混合开发 #

  Java的生态很强大,但是他的语法也常常让人诟病。提起.Net经常有人说他不能跨平台(其实早期.net 可以借助Mono跨平台,并且在多个领域取得了不可磨灭的成绩),国内生态不好。随着.net core 的出现和前段时间.Net5的发布,让.net 跨平台更容易。并且.net 有着超高的性能、优雅的语法等等很多方面被人称赞。在编程语言百花齐放的今天,我们需要扬长避短利用不同编程语言各自的优势为我们提供更好的服务。就在这种场景下我们推出了 Anno微服务框架,让微服务、跨语言混合开发变的更简单更容易。    在Anno中调用方(Client)无需知道服务提供方(Provider)的地址、端口、开发语言等等信息,因此我们在开发过程中对于我们需要的服务我们只管通过Client SDK调用,无需关注细节。这样我们也避免了在多语言开发的微服务中带来的各种奇葩问题。

8.1.3、Java集成细节展示#

avatar

Java服务的资源监控#

avatar

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

avatar

从网关(.NET5.0实现)访问Java服务#

avatar avatar

8.1.4 java端功能开发实例代码#

avatar avatar

package anno.componentservice;
import anno.componentservice.Models.UserInfo;
import anno.componentservice.events.UserEvent;
import anno.configuration.AnnoTheadPool;
import anno.entities.SysMember;
import anno.repository.SysMemberMapper;
import anno.thrift.annotation.AnnoInfo;
import anno.thrift.module.ActionResult;
import anno.thrift.module.BaseModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
@Service
//@Scope("prototype")
public class UserInfoModule extends BaseModule {
@Autowired
private ApplicationEventPublisher publisher;
@Autowired
private SysMemberMapper sysMemberMapper;
@AnnoInfo(desc = "用户信息")
public ActionResult<Object> GetUserInfo(GetUserInfoRequestDto queryInput){
UserInfo userinfo=new UserInfo();
userinfo.setAge(18);
userinfo.setName("Tom");
HashMap<String,Object> output=new HashMap<String, Object>();
output.put("key1","value1");
output.put("key2","value2");
for(HashMap.Entry<String,Object> kv:output.entrySet()){
output.put(kv.getKey(),kv.getValue());
}
HashMap<String,Object> outputData=new HashMap<String, Object>();
outputData.put("queryInput",queryInput);
outputData.put("userinfo",userinfo);
String msg= "this message from Java Server UserInfoModule.";
return new ActionResult<Object>(true, outputData, output, msg);
}
@AnnoInfo(desc = "你好世界")
public ActionResult<Object> HelloWorld(@AnnoInfo(desc = "名称",name = "name",required = false,defaultValue = "Anno Default Value") String anno){
String greetings="Hello "+anno+" I am Anno!";
return new ActionResult<>(true,greetings);
}
public void PublishMsg(String name){
if(name==null){
name="Anno";
}
UserEvent uv=new UserEvent();
uv.setId(10010);
uv.setName(name);
/**
* 线程池方式发布事件
*/
AnnoTheadPool.getPool().execute(()->{
publisher.publishEvent(uv);
});
/**
* 发布事件异步 创建线程
*/
// new Thread(()->{
// publisher.publishEvent(uv);
// }).start();
/**
* 直接发布事件 同步
*/
// publisher.publishEvent(uv);
}
@AnnoInfo(desc = "根据ID获取用户信息")
public ActionResult<SysMember> GetUserAutowired(long id) {
SysMember member=sysMemberMapper.selectById(id);
return new ActionResult<>(true,member);
}
}