例如,在一个Veritcle中使用UserService,通信通过事件总线进行。来代表它:
class SomeOtherService {
final UserService userService = new UserService();
// Mutable state
final Map<String, Single<String>> cache = new HashMap(); // Not Synchronized ?
public Single<String> getUserSessionInfo(String id) {
// Seems it is not save ! :
return cache.computeIfAbsent(id, _id -> {
log("could not find " + id + " in cache. Connecting to userService...");
return userService.getUserSessionInfo(id); // uses generated proxy to send msg to the event bus to call it
}
);
}
}
//在另一台机器上的另一个顶点/微服务的某个地方。
class UserService {
public Single<String> getUserSessionInfo(String id) {
return Single.fromCallable( () -> {
waitForOneSecond();
log("getUserSessionInfo for " + id);
if (id.equals("1"))
return "one";
if (id.equals("2"))
return "two";
else throw new Exception("could not"); // is it legal?
}
);
}
还有客户端代码,我们在其中订阅并决定调度程序:
final Observable<String> obs2 = Observable.from(new String[] {"1", "1"});
// Emulating sequential call of 'getUserSessionInfo' to fork in separate scheduler A
obs.flatMap(id -> {
log("flatMap"); // on main thread
return someOtherService.getUserSessionInfo(id)
.subscribeOn(schedulerA) // Forking. will thread starvation happen? (since we have only 10 threads in the pool)
.toObservable();
}
).subscribe(
x -> log("next: " + x)
);
问题是,对于缓存使用HashMap
的解决方案有多好(因为这里是共享状态)通过使用computeIfAbent方法?
即使我们使用的是事件循环
我应该使用ReplySubject
来实现缓存吗?vert的最佳实践是什么。x rx java?
看起来就像缓存一样。computeIfAbsent
是否在EventLoop上运行?是否安全,因为它是连续的?
很抱歉很多问题,我想我可以归结为:在Vert中实现“现金支付”服务呼叫的最佳实践是什么。x和Rx Java?
整个例子如下:
我想我在这里找到了答案:http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/ -
Observable<Data> source = Observable .concat(memory, diskWithCache, networkWithSave) .first();
当我用地图保存的时候。放(…)显式而不是使用ComputeFabSent
作为日志,我在事件循环中,我可以安全地使用非同步现金地图
我正在使用RxJava和和操作符: 返回从缓存列表构建的可观察,而方法使用Retrofit获取实体。 除非两个用户快速订阅返回的可观察对象,否则这非常有效。我猜在进行第二次订阅时,第一次订阅的网络请求没有完成。在这种情况下,执行了两个网络请求。我想避免。 我尝试创建一个单线程调度程序,以便仅在第一次调用结束时执行第二次调用,但没有运气: 以及: 我曾尝试将subscribeOn调用放在可观察链的较
Quarkus有类似于开箱即用?(在文件中找不到任何提及) 要穿上某种服务方式, 这将在一段时间内保留/缓存prev响应,并保留调用堆栈/日志。 类似于那个Spring注释?
使用RxJava,我需要将一个项目流缓冲到3个组中,但如果传入项目之间的间隔超过500ms,则刷新缓冲区。 bufferWithTimeOrCount()操作符正是我想要的,但它似乎只针对RxJS和Rx实现。NET,我需要使用RxJava来实现这一点。 是否有方法复制bufferWithTimeOrCount()的行为,并获得我对现有RxJava 1的期望。x运算符? 尝试每隔500毫秒发出一个新
编译以下代码时: 我得到一个错误: 错误消息试图说明什么?还有,怎么修? 有一个相关的问题,但解决方案是修改特征<code>a</code>(在我的例子中对应于<code>可绘制</code>),但这在这里是不可能的,因为<code>可以绘制</code>来自外部库。
我正在实现一个使用Swift Stack的Joss客户机调用外部服务的Lagom服务。如何缓存此信息以避免每次调用服务时都调用外部服务?
本文向大家介绍SpringCloud使用Feign实现服务调用,包括了SpringCloud使用Feign实现服务调用的使用技巧和注意事项,需要的朋友参考一下 Spring Cloud Feign简介 Spring Cloud Feign也是一个基础工具类,它整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能以外,它还提供了一种声明式的