OSGi DevCon欧洲大会:消息与OSGi的融合

工程 | Iwein Fuld | 2009年6月23日 | ...

昨天我在OSGi DevCon欧洲大会上发表了演讲,主题是如何使用Spring Integration和dm Server以务实的方式解决大型应用程序中的常见问题。在演讲前后,我与许多人交流,他们希望了解更多关于这些想法的信息。这篇博客将概述我的演讲内容。

我将直接进入演讲摘要。

任何项目在其活跃开发期间都会不断发展壮大。通常,开发人员会通过添加代码来添加功能并修复产品所有者提出的问题。这个过程会自然地增加代码库的大小。随着源代码的增长,维护和修复错误通常会变得越来越困难。如果不加以处理,这个过程最终会导致我称之为“代码超新星”的情况。这种不受控制的增长和最终的崩溃可以通过适当的模块化来避免,而OSGi是目前更有效的解决方案之一。

我谈到的第二个问题是单线程崩溃。在像Tomcat这样的Servlet容器中,这是通过使用线程池来为客户端提供服务来缓解的,但是如果单个请求代表一个大型作业,那么在一个单线程中运行它是很浪费的。对于更昂贵的服务调用,您需要划分工作。此外,在批处理或中间件集中型系统中,您将无法依赖Web容器为您进行线程管理,因此您必须自己处理这个问题,或者使用一个好的框架。

第三,模块化会对系统的响应时间产生负面影响。这尤其适用于引入网络边界的模块化。即使没有延迟,服务调用的结果也可能有很多后续步骤,以至于在渲染响应之前等待它花费的时间太长。

后两个问题可以通过消息传递来解决,而OSGi在将引入的网络延迟降至最低方面发挥着重要作用。

如果您想了解一些背景信息,请查看演示文稿。

我做了一个简单的系统示例演示,以及如何使用SpringSource Tool Suite、dm Server和Spring Integration来开发它。我已经在我的上一篇博客中详细介绍了这个想法(参见Spring Integration on dm Server),所以这里不再赘述。我选择了一个与我之前使用的“镇上的报号人”不同的领域。那是关于一辆公共汽车,一个司机和一些乘客……我被告知几次应该有一个严肃的例子,但我似乎帮不了自己。也许 *你* 可以实现一个模拟股票交易系统并将其提交到Spring Integration示例中?无论如何,我很喜欢这个演示,它甚至集成了Twitter!

只是一些代码片段,以便您可以构建自己的Twitter集成。我以前见过类似的例子,但我再也找不到了,无论如何这都很简单。Twitterer


import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.annotation.MessageEndpoint;
import twitter4j.Twitter;
import twitter4j.TwitterException;

@MessageEndpoint
public class Twitterer {
	@Autowired
	Twitter twitter;

	private AtomicInteger counter = new AtomicInteger(0);

	public void tweet(String tweet) {
		if (counter.incrementAndGet() < 3) {
			try {
				twitter.updateStatus("Announcement: \" " + 
						tweet + "\"");
			} catch (TwitterException e) {
				throw new RuntimeException(e);
			}
		}
	}
}

在应用程序上下文(为简洁起见省略了命名空间)


	<integration:outbound-channel-adapter ref="twitterer"
		method="tweet" channel="intercom" />

	<context:property-placeholder 
		location="classpath:/passenger/twitter.properties" />

	<beans:bean id="twitter" class="twitter4j.Twitter" 
		p:userId="${twitter.user}"
		p:password="${twitter.password}" />

Twitterer负责发布推文。实际上,您可以用消息过滤器替换它,但我建议不要将通道适配器直接附加到twitter4j.Twitter.updateStatus(..)方法。如果您想知道会发生什么,请查看这里

如果您想知道twitter4j包在哪里,我只是使用SpringSource Tool Suite中的Bundlor集成自己创建的。我花了不到20分钟,而且非常轻松。显然,有一个关于这个问题的未解决问题,因此它将在未来添加到我们的存储库中。

我希望您可以理解这些想法,并在我不完整的地方进行补充。我现在要去航海了,所以我的回复要等到我完成之后才能回复,但这不要阻止你。一如既往,非常感谢您的反馈。

获取Spring新闻通讯

通过Spring新闻通讯保持联系

订阅

领先一步

VMware提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看Spring社区中所有即将举行的活动。

查看全部