java 创建消息队列_java - 在Java中动态创建异步消息队列 - 堆栈内存溢出
我同意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中动态创建异步消息队列 - 堆栈内存溢出相关推荐
- java打印空白页_java - DocPrintJob在随机主机上打印空白页 - 堆栈内存溢出
我在各种主机和打印机上打印包含某些标签的PDF时遇到问题. 在某些主机上,我的应用程序打印了许多空白页,但在其他主机上,一切正常. 我不知道为什么. 我没有任何空异常或其他东西. 在装有Linux和带 ...
- matlab 创建 符号矩阵,如何在MATLAB中动态创建符号矩阵?
我需要在MATLAB中创建一个符号矩阵.它可以静态地完成为如何在MATLAB中动态创建符号矩阵? syms a11 a12 a21 a22; A = [a11 a12; a21 a22]; 或使用紧凑 ...
- java中方法未定义_java - Java SE中的未定义方法错误 - 堆栈内存溢出
我为该问题写了一个代码http://www.spoj.com/problems/PRIME1/ ,该代码的作用是将输入以字符串形式输入,然后将split()拆分为两个整数,并存储在该数组中.然后返回到 ...
- aws java mysql_java - AWS EC2 / MySql - spring boot无法从datasource确定jdbc url - 堆栈内存溢出...
我有一个简单的Spring Boot应用程序,我试图在基于Amazon AMI的Amazon EC2实例上部署. 它使用MySql数据库(版本8.0.15). 我在AWS上创建了数据库,当我从本地系统 ...
- java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出
===============>>#1 票数:41 已采纳 使用slf4j无法做到这slf4j . 我想,缺少这个功能的原因是,几乎不可能为slf4j构建一个Level类型,它可以有效地映 ...
- java 字符串转utc时间_java - 如何转换UTC日期字符串并删除Java中的T和Z? - 堆栈内存溢出...
TL;博士 Instant.parse( "2018-05-23T23:18:31.000Z" ) // Parse this String in standard ISO 860 ...
- 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 ...
- java 图片有损压缩_java - 用有损jpeg压缩多页tiff图像 - 堆栈内存溢出
将图像从16位减少到8位. 假设您有一个byte []变量plane16,在其中您有图像的所有像素. 注意 :我的byte [] plane16从16位图像获取数据,但是byte为8bit = 1by ...
- java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...
我正在使用某些应用程序的API下载文档. 问题是,当我尝试解析inputStream时,它将引发响应代码409异常. 但是最大的问题是它有时会抛出此异常. 此异常的原因是什么? 这是我的代码: URL ...
- java游戏怎么导入jme3,java - JME:将带有纹理的Cinema 4d模型导入jMonkey Projekt - 堆栈内存溢出...
我的问题是: 现在,我想将其导出到我的jMonkeyEngine中,以将其设置在场景中并对其进行动画处理. 我试图将模型导出为.obj文件并将其加载到我的项目中(只是.obj文件). 结果是我没有纹理 ...
最新文章
- 后端服务性能压测实践
- 1.3 选择适合的Arduino
- CentOS 7 搭建docker仓库
- android-cmake环境变量
- 【项目实战】多场景下的图表可视化表达
- 前端学习(2673):vite
- C语言之文件读写探究(七):随机读写文件
- opencv基本的图像处理函数
- 基于ansible Role实现批量部署lamp平台
- Power BI 简介
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(7):信号通讯
- 基于MFFMB的电商评论文本分类研究
- 多媒体计算机硬件指示,多媒体计算机硬件系统构成
- TI PMP解决方案简介
- BF2地图下载 战地系列非官方单机地图集
- 必备技能~程序员如何快速制作不同颜色不同大小的icon?
- 用python批量处理图片尺寸
- 2017 百度之星 复赛 Valley Numer(数位dp)
- c语言起点零算法32继续求多项式,武汉科技大学ACM :1001: 零起点学算法34——继续求多项式...
- “汉语编程”是解决安全问题的终极之路?
热门文章
- STM32——HAL版——定时器ms和us延时函数
- 计算机电路基础电压比较器电路图,计算机电路基础期末复习.doc
- mysql与_mysql常见的运算符及使用
- 1137. 第 N 个泰波那契数 动态规划
- 2021-08-20 Redis 基本类型:string set sortedSet Hash List
- 406.根据身高重建队列
- mysql xa 异常_面试官问我:MySQL中的XA事务崩溃了如何恢复??
- java打开文件对话框
- 斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”
- 【机器学习】主成分分析 (PCA)、无监督特征提取