Ish*_*Ish 7 java queue asynchronous jms
我很难弄清楚如何构建我系统的最后一块.目前我正在运行一个Tomcat服务器,它有一个响应客户端请求的servlet.每个请求反过来将一个处理消息添加到异步队列(我可能会通过Spring或更可能是Amazon SQS使用JMS).
事件的顺序是这样的:
发送方:
1.获取客户端请求
2.使用唯一ID将一些数据添加到与此请求相关的数据库中
3.将表示此请求的消息对象添加到消息队列
接收方:
1.从队列中提取新的消息对象
2.打开对象并根据msg对象中包含的信息从网站获取一些信息.
3.发送电子邮件警报
4.更新我的数据库行(相同的唯一ID)以及为此请求完成操作的信息.
我正在努力弄清楚如何妥善处理接收方.一方面,我可以创建一个简单的java程序,我从命令行启动它,选择队列中的每个项目并处理它.这样安全吗?让该程序作为Tomcat容器中的另一个线程运行更有意义吗?我不想连续地这样做,这意味着接收端应该能够一次处理多个对象 - 使用多个线程.我想让它一直24小时都在运行.
建立接收方有哪些选择?
“一方面,我可以创建一个简单的 java 程序,从命令行启动该程序,该程序选择队列中的每个项目并对其进行处理。这样安全吗?”
它有什么不安全的地方呢?效果很好。
“让该程序作为 Tomcat 容器内的另一个线程运行更有意义吗?”
仅当 Tomcat 有大量空闲时间来处理后台处理时。通常情况就是这样——您有空闲时间进行此类处理。
然而,线程并不是最佳的。线程共享公共 I/O 资源,并且您的后台线程可能会减慢前端速度。
更好的是在“端口 80”前端和单独的后端进程之间有一个 JMS 队列。后端进程启动,连接到队列,获取并执行请求。后端进程可以(如果需要)是多线程的。