我同意Adam,用例听起来像JMS是开销。 Java内置功能足够:

package de.mhaller;

import java.util.ArrayDeque;

import java.util.ArrayList;

import java.util.Deque;

import java.util.HashMap;

import java.util.Map;

import java.util.Queue;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.LinkedBlockingDeque;

import org.junit.Assert;

import org.junit.Test;

public class Mailer {

@Test

public void testMailer() throws Exception {

ExecutorService executor = Executors.newCachedThreadPool();

ArrayList log = new ArrayList();

LinkedBlockingDeque incoming = new LinkedBlockingDeque();

// TODO: Put mails to be sent into the incoming queue

incoming.offer(new Mail("foo1@localhost", "localhost"));

incoming.offer(new Mail("foo2@otherhost", "otherhost"));

incoming.offer(new Mail("foo3@otherhost", "otherhost"));

incoming.offer(new Mail("foo4@localhost", "localhost"));

Map> queues = new HashMap>();

while (!incoming.isEmpty()) {

Mail mail = incoming.pollFirst();

Mailserver mailserver = findMailserver(mail);

if (!queues.containsKey(mailserver)) {

ArrayDeque serverQueue = new ArrayDeque();

queues.put(mailserver, serverQueue);

executor.execute(new SendMail(mailserver, serverQueue));

}

Queue slot = queues.get(mailserver);

slot.offer(mail);

}

assertMailSentWithCorrectServer(log);

}

private void assertMailSentWithCorrectServer(ArrayList log) {

for (Mail mail : log) {

if (!mail.server.equals(mail.sentBy.mailserver)) {

Assert.fail("Mail sent by wrong server: " + mail);

}

}

}

private Mailserver findMailserver(Mail mail) {

// TODO: Your lookup logic which server to use

return new Mailserver(mail.server);

}

private static class Mail {

String recipient;

String server;

SendMail sentBy;

public Mail(String recipient, String server) {

this.recipient = recipient;

this.server = server;

}

@Override

public String toString() {

return "mail for " + recipient;

}

}

public static class SendMail implements Runnable {

private final Deque queue;

private final Mailserver mailserver;

public SendMail(Mailserver mailserver, Deque queue) {

this.mailserver = mailserver;

this.queue = queue;

}

@Override

public void run() {

while (!queue.isEmpty()) {

Mail mail = queue.pollFirst();

// TODO: Use SMTP to send the mail via mailserver

System.out.println(this + " sent " + mail + " via " + mailserver);

mail.sentBy = this;

}

}

}

public static class Mailserver {

String hostname;

public Mailserver(String hostname) {

this.hostname = hostname;

}

@Override

public String toString() {

return hostname;

}

@Override

public int hashCode() {

return hostname.hashCode();

}

@Override

public boolean equals(Object obj) {

return hostname.equals(((Mailserver) obj).hostname);

}

}

}

java 创建消息队列_java - 在Java中动态创建异步消息队列 - 堆栈内存溢出相关推荐

  1. java打印空白页_java - DocPrintJob在随机主机上打印空白页 - 堆栈内存溢出

    我在各种主机和打印机上打印包含某些标签的PDF时遇到问题. 在某些主机上,我的应用程序打印了许多空白页,但在其他主机上,一切正常. 我不知道为什么. 我没有任何空异常或其他东西. 在装有Linux和带 ...

  2. matlab 创建 符号矩阵,如何在MATLAB中动态创建符号矩阵?

    我需要在MATLAB中创建一个符号矩阵.它可以静态地完成为如何在MATLAB中动态创建符号矩阵? syms a11 a12 a21 a22; A = [a11 a12; a21 a22]; 或使用紧凑 ...

  3. java中方法未定义_java - Java SE中的未定义方法错误 - 堆栈内存溢出

    我为该问题写了一个代码http://www.spoj.com/problems/PRIME1/ ,该代码的作用是将输入以字符串形式输入,然后将split()拆分为两个整数,并存储在该数组中.然后返回到 ...

  4. aws java mysql_java - AWS EC2 / MySql - spring boot无法从datasource确定jdbc url - 堆栈内存溢出...

    我有一个简单的Spring Boot应用程序,我试图在基于Amazon AMI的Amazon EC2实例上部署. 它使用MySql数据库(版本8.0.15). 我在AWS上创建了数据库,当我从本地系统 ...

  5. java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出

    ===============>>#1 票数:41 已采纳 使用slf4j无法做到这slf4j . 我想,缺少这个功能的原因是,几乎不可能为slf4j构建一个Level类型,它可以有效地映 ...

  6. java 字符串转utc时间_java - 如何转换UTC日期字符串并删除Java中的T和Z? - 堆栈内存溢出...

    TL;博士 Instant.parse( "2018-05-23T23:18:31.000Z" ) // Parse this String in standard ISO 860 ...

  7. java ftp 关闭连接_java - 使用Java Apache FTPClient进行FTP TLS获取“握手时远程主机关闭连接”[重复] - 堆栈内存溢出...

    我在Windows 10 64x上为FTP TLS(org.apache.commons.net.ftp)运行了一个Java(1.8)程序: FTPSClient ftpClient = new FT ...

  8. java 图片有损压缩_java - 用有损jpeg压缩多页tiff图像 - 堆栈内存溢出

    将图像从16位减少到8位. 假设您有一个byte []变量plane16,在其中您有图像的所有像素. 注意 :我的byte [] plane16从16位图像获取数据,但是byte为8bit = 1by ...

  9. java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...

    我正在使用某些应用程序的API下载文档. 问题是,当我尝试解析inputStream时,它将引发响应代码409异常. 但是最大的问题是它有时会抛出此异常. 此异常的原因是什么? 这是我的代码: URL ...

  10. java游戏怎么导入jme3,java - JME:将带有纹理的Cinema 4d模型导入jMonkey Projekt - 堆栈内存溢出...

    我的问题是: 现在,我想将其导出到我的jMonkeyEngine中,以将其设置在场景中并对其进行动画处理. 我试图将模型导出为.obj文件并将其加载到我的项目中(只是.obj文件). 结果是我没有纹理 ...

最新文章

  1. 后端服务性能压测实践
  2. 1.3 选择适合的Arduino
  3. CentOS 7 搭建docker仓库
  4. android-cmake环境变量
  5. 【项目实战】多场景下的图表可视化表达
  6. 前端学习(2673):vite
  7. C语言之文件读写探究(七):随机读写文件
  8. opencv基本的图像处理函数
  9. 基于ansible Role实现批量部署lamp平台
  10. Power BI 简介
  11. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(7):信号通讯
  12. 基于MFFMB的电商评论文本分类研究
  13. 多媒体计算机硬件指示,多媒体计算机硬件系统构成
  14. TI PMP解决方案简介
  15. BF2地图下载 战地系列非官方单机地图集
  16. 必备技能~程序员如何快速制作不同颜色不同大小的icon?
  17. 用python批量处理图片尺寸
  18. 2017 百度之星 复赛 Valley Numer(数位dp)
  19. c语言起点零算法32继续求多项式,武汉科技大学ACM :1001: 零起点学算法34——继续求多项式...
  20. “汉语编程”是解决安全问题的终极之路?

热门文章

  1. STM32——HAL版——定时器ms和us延时函数
  2. 计算机电路基础电压比较器电路图,计算机电路基础期末复习.doc
  3. mysql与_mysql常见的运算符及使用
  4. 1137. 第 N 个泰波那契数 动态规划
  5. 2021-08-20 Redis 基本类型:string set sortedSet Hash List
  6. 406.根据身高重建队列
  7. mysql xa 异常_面试官问我:MySQL中的XA事务崩溃了如何恢复??
  8. java打开文件对话框
  9. 斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”
  10. 【机器学习】主成分分析 (PCA)、无监督特征提取