我听说亚马逊使用HTTP作为基于微服务的架构.另一种方法是使用RabbitMQ或Solace系统之类的消息传递系统.我个人有基于Solace的微服务架构的经验,但从未使用过REST.
知道像亚马逊,Netflix,英国政府等各种大联盟实施使用的是什么?
其他方面是,在微服务中,需要以下事项(除了其他):
*模式匹配
*异步消息传递..接收系统可能已关闭
*发布订阅
*缓存加载事件..即启动时,服务可能需要加载所有来自其他几项服务的数据,并应在数据完全加载时得到通知,以便它"知道"它现在已准备好为请求提供服务
这些方面通过消息而不是REST自然完成.为什么要有人使用REST(公共API除外).谢谢.
我理解read-acquire(在它之后没有重新排序后续的读/写操作)和write-release(不重新排序它之前的读/写操作).我的q是: -
读取和读取相同,与易失性读取相同,写入发布与Java中的易失性写入相同吗?
为什么这很重要的是,让我们来看看写释放的情况.
y = x; // a read.. let's say x is 1 at this point
System.out.println(y);// 1 printed
//or you can also consider System.out.println(x);
write_release_barrier();
//somewhere here, some thread sets x = 2
ready = true;// this is volatile
System.out.println(y);// or maybe, println(x).. what will be printed?
Run Code Online (Sandbox Code Playgroud)
此时,是x 2还是1?在这里,考虑准备挥发.据我所知,volatile之前的所有商店都将首先显示出来......然后只有volatile才能显示出来.谢谢.
参考: - http://preshing.com/20120913/acquire-and-release-semantics/
在Java中我可以这样做:
Runnable task = () -> { System.out.println("Task is running"); };
Run Code Online (Sandbox Code Playgroud)
但是Scala怎么来我也做不到!
val task: Runnable = () => {println("Task is running")}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误!我使用的是Scala 2.11.8版.
type mismatch; found : () => Unit required: Runnable
Run Code Online (Sandbox Code Playgroud) 假设我有十几个微服务。我想知道前端应该去哪里。假设前端是HTML,Javascript,CSS。一种方法是使它成为由UI团队处理的单独服务。因此,它可以形成API网关,其中来自浏览器的请求首先进入。但这似乎与独立的自包含服务的想法背道而驰。
浏览器------> API网关------>微服务
在此链接中,他们说Java和CSS应该由微服务提供。API网关应仅提供HTML页面。这是一个很好的图表,显示了此>>
我有两个问题:
1.如何实施?API网关将如何为微服务中的JS和CSS文件以及HTML片段提供服务。初始页面加载将如何发生以及从何处进行。
2.现在,我们将HTML混合到微服务中。但是,如果我也想提供Android和iOS应用程序怎么办?谢谢。
我有一个使用 MongoDB 的 Java 应用程序(或者它可以是任何类似的服务)。启动时,应用程序会创建与数据库的单例连接。为了进行连接,我从 AWS Secrets Manager 获取 MongoDB...因此应用程序在与 MongoDB 通信后可以愉快地运行。
我的问题是:AWS Secrets Manager 轮换密钥时会发生什么?
例如,轮换设置为 7 天。所以我在我的应用程序中编写代码,每 7 天刷新一次……这不好,因为很难精确计时。
另一种方法可能是,如果我的应用程序面临身份验证异常,只需刷新密码并建立新连接并重试应用程序逻辑。
行业标准是什么?
我正面临这样的问题。我修改了一个文件并对其进行了测试。让我们称这种状态为“最后的良好状态”。
然后我再修改一些代码。现在一些经理人告诉我提交和部署我测试过的东西。所以我想要的是将我的文件安全地保存在远程存储库中(我不希望硬盘崩溃破坏我在上次良好状态后所做的更改),恢复到上次良好状态,然后提交上次良好状态。
在其他 VCS 中,我可以选择将文件保存到远程服务器而不提交。在 Git 中没有这样的选项。我可以存储,但它在我的本地磁盘上,并且在硬盘崩溃时不安全。谁有想法?
使用新的Java 8 java.time API,我需要转换LocalDate并获取月和日的全名.像三月(不是三月)和周一(不是周一).3月13日星期五应格式化为3月13日星期五..不是3月13日星期五.
StampedLock 与其他锁的比较表明,随着争用的增加, StampedLock是最快的。然而,这篇文章和其他各种文章都没有列出为什么它更快。它似乎使用与其他类型的锁相同的 CAS 语义?谁能解释为什么随着争用的增加它速度最快?
例如,在下面的代码中,writeLock 不仅会阻塞其他 writeLock,还会阻塞 readLock。目前我不关心optimisticReadLocks 等。只是简单的 writeLock .. 有什么优点以及它比 ReentrantLock 更快(而且它甚至没有可重入性)。
public static void main(String[]args)throws Exception{
StampedLock lk = new StampedLock();
new Thread(() -> {
long stamp = lk.writeLock();
try {
out.println("locked.. sleeping");
TimeUnit.SECONDS.sleep(5);
lk.unlock(stamp);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
long stamp = lk.writeLock();
try {
out.println("locked.. sleeping");
TimeUnit.SECONDS.sleep(5);
lk.unlock(stamp);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为A.class的hello世界程序。它是使用command编译的javac A.java。它所做的只是打印“ hello world”。
接下来,我使用进行了编译javac -g A.java。我期望看到行号,但看不到。知道发生了什么吗?
我确实看到在javac编译的.class文件和javac -g编译后的某些特殊字符之间的细微差别。但是我看不到任何行号。
我对此的好奇心是因为我想找到线数可能会对性能产生什么样的影响。其次,我想知道log4j等如何维护记录的行号。谢谢。
java ×5
architecture ×2
docker ×1
git ×1
java-time ×1
javac ×1
localization ×1
messaging ×1
nonblocking ×1
rest ×1
scala ×1