【问题标题】:Which library of spring should I use to send emails with multy-threading我应该使用哪个 spring 库来发送多线程电子邮件
【发布时间】:2015-05-13 06:54:01
【问题描述】:

我有太多的电子邮件。我应该编写调度程序以便向他们发送消息。消息不同。我使用弹簧框架 4.x。

我可以编写连接到 SMTP 服务器的简单类。但在这种情况下,我也应该编写我的线程库,以便并行发送电子邮件。

spring 是否已经编写了库,可以让我更灵活地完成这项任务?我不想使用线程。如果spring已经有这个功能就好了。

为此我需要 Spring 集成吗?

最好的问候,

【问题讨论】:

  • 我是否也需要 spring 集成?
  • 嗯,我猜你没有
  • 据我所知,spring 集成会自动执行此任务。
  • 你能不安装像 Postfix 这样的本地 MTA 并让它处理转发电子邮件吗?

标签: multithreading spring spring-mvc spring-integration


【解决方案1】:

是的,你绝对可以通过 Spring Integration 做到这一点,因为有一个 ExecutorChannel 实现,可以从 Spring Core 提供一个 TaskExecutor

<channel id="sendEmailChannel">
   <dispatcher task-executor="threadPoolTaskExecutor"/>
</channel>

<int-mail:outbound-channel-adapter channel="sendEmailChannel" mail-sender="mailSender"/>

但无论如何你应该记住,所有 Spring Integration 组件都是基于 Java 的,ExecutorService 是在后台使用的。

另一方面,如果您只需要从 Spring Integration 发送邮件,这将是一个开销,并且可以简单地使用 Core Spring Framework 遗留的 JavaMailSender 作为 bean 和 @Async 作为 sendMail 方法达到您的parallel 要求。

更新

你能告诉我这种情况是否需要 JMS 吗?

我在这里看不到任何与 JMS 相关的东西。您的解决方案中没有(或至少没有显示)任何真正的 integration 点。我什至可以对仅用于电子邮件发送的 Spring Integration 说同样的话。但是,使用 Spring Boot,您的 SI 配置将足够短。另一方面,如果您最终能够更好地学习 Spring 集成,您将获得更多的收益来依赖您的系统的集成组件,包括在内部以及通过 JMS、AMQP、Kafka 等在外部与其他系统一起使用。

说实话:很多年前我第一次认识 Spring Integration 是因为需要从 FTP 获取文件并能够自动获取新文件。我只在 Spring Integration 1.0.0.M1 中找到了解决方案。在&lt;int-ftp:inbound-channel-adapter&gt; 的简短 XML 配置之后,我喜欢 Spring Integration,从那时起它就成为我生活的一部分。 :-)

因此,您可以在简单的应用程序中继续使用 Spring 集成,或者直接使用 JavaMailSender 直接使用更正式的解决方案。

【讨论】:

  • 感谢您的回答!你能告诉我这种情况是否需要 JMS 吗?我认为没有必要使用它,不是吗?另外,为什么弹簧集成是开销?因为配置太多?还是有其他原因?
【解决方案2】:

你应该使用 java executors 框架。例如,您可以编写如下代码:

ExecutorService executor = Executors.newWorkStealingPool();
executor.execute(() -> mailSender.send(mail));

【讨论】:

  • 我是否也需要 spring 集成?
  • 不,Executors 是 JDK 的一部分。
  • 我的问题是另一个问题。如果我可以在没有 JDK 并发包的情况下完成任务,我很感兴趣。例如,如果 spring 集成可以做到这一点。
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 2021-09-19
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
相关资源
最近更新 更多