Tiny快速入门之服务开发
Tiny快速入门之服务开发
悠悠然然 发表于3年前
Tiny快速入门之服务开发
  • 发表于 3年前
  • 阅读 6143
  • 收藏 89
  • 点赞 10
  • 评论 12

周五发了Tiny框架即将全面开源一文,有不少同学给了不少有意义的意见和建议,其中一条就是感觉太虚了,期望来点实的,因此本文将从实打实的快速开发方面讲起,来说明一下用Tiny框架开发一些业务是如何操作的,本文中的内容全部来源于Tiny快速入门手册,希望亲自动手实践的同学们,可以直接去下载并按照手册进行即可进行验证。

下面是一些常网的链接,供大家使用:

GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny
问题报告:https://git.oschina.net/tinyframework/tiny/issues
官方网站:http://www.tinygroup.org

一、服务的定义

Tiny中的服务与Spring中的Service的概念是不一样的,这里的服务是有确定的输入和输出,有唯一标识,并且在处理上具有原子性的一种处理逻辑。它与Java中的一个方法是有对应关系的,与类或接口无关。另外,这里的服务是无状态的,也就是说它是没有会话保持等相关性的,你能期望第一次调用的时候传入一个用户ID,以后的访问就是针对这个用户的处理了,而应该每次都传入要处理用户的ID及其它数据。

Tiny中的服务具有跨域特性,也就是说一旦你把一个方法发布成一个服务,当用服务的方式调用的时候,你就无法确定这个服务的的真实执行逻辑是在本机或是远程计算机,所以不能假定其所在的位置而获取机器相关的一些内容。当然,如果你只安装一台服务器来提供服务,这个时候是可以确定调用者和真正执行逻辑是在一台计算机的,但是这样你将失去水平扩展能力。

不要期望在服务的处理逻辑中可以访问Http相关的对象,比如:request, response,cookie等Web应用相关的内容,因为在Tiny的服务体系中,服务是环境无关的,它是不知道调用的服务是来自哪个渠道(网站,手机APP,WAP,其它服务调用方式),所以,所有的入参就是提供给服务的输入,输出就是它的响应,如此而已。

Tiny的服务具有外部多样性,且开发了一个Tiny服务,你就可以通过各种渠道来访问它,而不用做额外的开发和处理。比如:通过Java调用,通过WebService调用,通过Json调用,通过Xml调用等等,你也可以扩展自己期望的其它访问方式(Fix,Fast,8583等等),但是不论如何,一次开发,到处可以使用。

Tiny的服务与Java的方法的区别在于:使用方法你得保证部署在一个虚拟机,而用Tiny服务就是我只要知道你存在就行了,才不管你是在哪里;Java方法的调用者必须是Java类,而Tiny服务的调用者就可以跨平台,跨语言;Java方法当然是用Java开发的,Tiny服务的开法是无所谓了,可以是Java,也可以是流程,还可以是通过通道对接的其它语言实现的。

到目前为止,您对Tiny的服务可以已经有了一点模糊的印象,Let's go!

二、利用Tiny开发服务

用Tiny开发服务是非常简单的事情,Tiny内嵌提供了多种服务开发方式,有Xml配置方式,注解方式,流程编排方式,三种各有优缺点:

下面一个一个介绍。

1、Xml配置方式开发服务

public class HelloWorldXmlService{
	public String sayHello(String name) {
		if (name == null) {
			name = "world";
		}
		return "hello," + name;
	}
}
不需要引入任何Tiny框架的类和接口,因此是0侵入性。

如果是采用其它IDE,就需要手工配XML了,不过采用Eclipse的童鞋们有福气了,安装了Tiny插件之后,可以看到在代码编辑窗口下面会多出一个服务管理的Tab页。

点击一下切换过去,就可以看到下面的页面了:

只要把要发布发服务的方法前面的检查框选中,一个服务就发布成功了。 

当然,这个类里面也可能有许多要发布成服务的方法,那也简单,方法名前 面的检查框,点击一次会全部选中,再点一次会全部取消选中。

总结一下,如果用Eclipse开发,有了Tiny服务开发插件,要发布成服务,就是增加“一点”的工作量。

2.注解方式开发服务

注解开发Tiny服务方式如下 :


import org.tinygroup.service.annotation.ServiceComponent;
import org.tinygroup.service.annotation.ServiceMethod;
import org.tinygroup.service.annotation.ServiceResult;
import org.tinygroup.service.annotation.ServiceViewMapping;

@ServiceComponent()
public class HelloWorldAnnotationService{
	@ServiceMethod(serviceId = "sayHelloA")
	@ServiceResult(name = "result")
	public String sayHello(String name) {
		if (name == null) {
			name = "world.";
		}
		return "hello," + name;
	}
}
方法还是那个方法,但是就是要用注解进行一下标识:


@ServiceComponent 标识这个类里面有些方法会被发布成服务

@ServiceMethod(serviceId = "sayHelloA")标识这个方法要被发布成服务

@ServiceResult(name = "result")标识这个服务返回值的用标识result表示。

 清楚还是清楚的,就是有侵入性。(本人有点代码洁癖,说实际的不太喜欢代码当中夹着这一堆的注解,但是不排除有人喜欢,因此还是提供了这种方式)

3.流程编排方式开发Tiny服务

创建一个流程,然后拖入一个HelloWorld组件,然后在扩展属性的名字里输入“ ${name}”表达式,在结果键值中输入“ result”

然后,就没有然后了,OK了。

有同学问,你这个HelloWorld组件哪里来的??这个是另外一个话题,就是如何创建流程组件了。

在Tiny开发框架中,流程组件和使用流程组件开发是两种类型的角色。

三、Tiny服务开发进阶

有人说了,你这个就是个HelloWorld有毛用,我真正的业务逻辑是非常复杂的呢。

问题问得非常好,实际上能把HelloWorld做出来,还有什么复杂的做不出来呢?

你里面要用Spring+Hibernate/ibatis来开发服务的业务逻辑,当然没有问题;你想用其它的方式来开发,也没有问题;这也是Tiny框架在设计时的一个设计目标,就是要与现有各种开源框架有良好的集成能力。

如果你想复用原来开发的代码,完全可以不改一行代码,通过Xml配置方式,发布成Tiny服务,而享受Tiny框架带来的水平扩展能力、分层部署能力、各种通道访问能力、模块化管理。

当然,你也可以使用Tiny框架来开发服务,享受飞一般的体验。

如果有什么问题,请回复提问,有问必答。


共有 人打赏支持
悠悠然然
粉丝 2281
博文 171
码字总数 353767
作品 14
评论 (12)
anduo
非常好的入门,开发服务非常快速,另外不知道在服务异常处理方面的支持如何?
悠悠然然

引用来自“anduo”的评论

非常好的入门,开发服务非常快速,另外不知道在服务异常处理方面的支持如何?
异常处理采用AOP异常的。
restmad
这个服务发布思路非常好。就是不知道是不是标准webservice的实现。
悠悠然然

引用来自“restmad”的评论

这个服务发布思路非常好。就是不知道是不是标准webservice的实现。
文章里有说,可以按照标准WebService,Json,Xml等各种方式访问
简单代码
和Web Service一回事吧?
悠悠然然

引用来自“简单代码”的评论

和Web Service一回事吧?
如果是按WS方式访问,是一回事,但是实际上可以支持N种访问方式。
yuanly
有问题问题请教,如果需要将多个原子服务封装成一个服务接口对外提供服务,怎么保证事务一致性呢?谢谢
悠悠然然

引用来自“lenyuan”的评论

有问题问题请教,如果需要将多个原子服务封装成一个服务接口对外提供服务,怎么保证事务一致性呢?谢谢
你就一个一个写方法,然后Spring会搞定这一切。
restmad

引用来自“restmad”的评论

这个服务发布思路非常好。就是不知道是不是标准webservice的实现。

引用来自“悠悠然然”的评论

文章里有说,可以按照标准WebService,Json,Xml等各种方式访问
牛叉。
Gherkin
非常好,就是快速入门手册的链接不能用了哦!
悠悠然然

引用来自“anduo”的评论

非常好的入门,开发服务非常快速,另外不知道在服务异常处理方面的支持如何?

支持aop异常拦截
悠悠然然

引用来自“Gherkin”的评论

非常好,就是快速入门手册的链接不能用了哦!

到主站看在线文档,900页规模,足够看一阵子了
×
悠悠然然
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: