前言:随着系统的业务功能不断增强,传统的单机、单任务,单线程的运行模式已经逐渐的被淘汰,取而代之的是分布式,多任务,多线程,当然,现在开源的这方面的框架也非常的多,大概的思想也都类似,下面就结合我这一年多的工作心得,分享一个简单易实现的分布式,多任务,多线程的异步任务处理系统的基本实现。
1.系统部署图
该系统主要由3部分构成,任务生产者集群,消息中间件集群,任务消费者集群,下面来分别说下这3部分的作用:
任务生产者集群:顾名思义,主要用来产生消息任务,并将这些消息任务发送到消息中间件集群中,任务生产者集群可能使用的是不同的开发语言,开发框架以及不同的开发平台。
消息中间件集群:消息中间件集群主要的作用是使生产者和消费者解耦,屏蔽各个异构系统之间的区别,以及保证消息的传送,超时重试和消息任务的负载均衡。并确保同一消息只被一个消费者消费。为了实现系统的高可用性,此处使用了集群模式,实现master-slave模式。
任务消费者集群:这个是我们的业务核心,通过消费消息中间件传送过来的消息,从而实现我们的业务功能需求。为了保证任务被及时的处理,我们会用到spring的线程池,来实现任务的异步调度。
2.系统设计
(1)为了保证系统的高可用性,消息中间件集群我们采用的是主备结构,配置文件如下:
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="failover:(tcp://localhost:61616,tcp://localhost:61617)" />
</bean>
为了减少消息中间件由于频繁连接导致的性能消耗,会使用连接池,配置文件如下: