我知道可以链接Mono的,例如......
Mono<String> resultAMono = loadA();
Mono<String> resultBMono = resultA.flatMap(resultA -> loadB());
Run Code Online (Sandbox Code Playgroud)
这将链和resultBMono将在resultAMono返回时运行....
所以我的问题是,是否有可能并行启动2个单声道并且当两个单声道继续使用另一个单声道时?
我认为它看起来像这样......
Mono<String> resultAMono = loadA();
Mono<String> resuktBMono = loadB();
Mono<Tuple2<Stirng, String> tupleMono = Mono.zip(resultAMono, resultBMono);
Run Code Online (Sandbox Code Playgroud)
但是我不知道这将并行运行或者我可以做什么来并行运行...
谢谢答案....
我正在用 Gradle 进行一些实验,但作为主要的 Maven 用户,一些依赖范围让我感到困惑……
有些与 Maven 相同:
compile -> compile
runtime -> runtime
compileOnly -> provided
Run Code Online (Sandbox Code Playgroud)
但我也遇到了implementation这听起来像parentMaven POM的元素,但又不是。
有人可以向我解释一下是什么implementation以及其他一些,如果它们存在而我没有在这里提到(上面的测试版本很明显不需要解释)?
如果implementation不像Maven上的父级,我们如何在Gradle中具有Maven的父级POM效果?
我有一个关于 Kafka 主题清理策略及其与 log.retention 的交互的问题....
比如我把cleanup.policy设置为compact,compaction只会在topic的保留时间之后才开始或者保留时间对compaction没有影响?
问题的第二部分,如果我使用compact,delete一起,并且我有log.retention for让说1天,主题一直被压缩但是主题的内容会在一天后被删除?或者一天后实现压缩和删除?
谢谢你的答案...
我尝试使用Spring Webflux做一些事情,但是我确实对某些反应性概念感到困惑。
我有一些受表单身份验证保护的REST服务,在我可以调用我的业务REST服务之前,我必须调用通过Spring Security提供的“登录” URL,传递我的凭据并将返回的Cookie放置到对其他REST服务的进一步调用中。
以下是REST业务服务的呼叫摘要。
@RequestMapping(value = "/endpoint1", method = RequestMethod.POST)
public Mono<String> businessService(@RequestBody ApiManagementWrapper apiManagementWrapper, ServerWebExchange httpRequest) {
log.info("Handling /enpoint1");
Mono<String> t = fetch(apiManagementWrapper, httpRequest);
return t;
}
private Mono<String> fetch(ApiManagementWrapper apiManagementWrapper, ServerWebExchange httpRequest) {
return this.webClientProxy
.post()
.uri("http://localhost:8081/something")
.headers(httpHeaders -> httpRequest.getRequest().getHeaders())
.cookies(httpCookies -> httpRequest.getRequest().getCookies())
.body(BodyInserters.fromPublisher(Mono.just(apiManagementWrapper.getEnterpriseMessage()), Object.class))
.exchange()
.flatMap(response -> response.bodyToMono(String.class));
}
Run Code Online (Sandbox Code Playgroud)
完美地工作,我的问题是如何将其结合到呼叫登录服务中。
我考虑过以下login()方法...
private void login(ApiManagementWrapper apiManagementWrapper) {
LinkedMultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
formData.add("username", "user1");
formData.add("password", "user1");
Mono<ClientResponse> response = this.webClientRouteConfirmation
.post()
.uri("http://localhost:8383/login")
.body(BodyInserters.fromFormData(formData))
.exchange();
response.subscribe(clientResponse …Run Code Online (Sandbox Code Playgroud) 我有一个关于 Yourkit 和 Java Mission Control 的问题......
我 7 年前使用 Yourkit 来分析 J2EE 应用程序,现在我正在为另一个项目工作,我必须分析一个应用程序,该项目没有 Yourkit 的许可证。
在网上搜索的过程中,我发现了Java Mission Control,在我看来,它几乎与7年前的Yourkit具有相同的功能。
所以我的问题是,最新版本的 Yourkit 是否比 JMC 做了更多的事情,这样我就可以争论我的项目来争论支付许可证......
谢谢各位的解答....
我正在使用Kubernetes Persistent Volumes进行实验,在Kubernetes文档中找不到清晰的解释,并且该行为不是我所期望的,所以我想在这里问一下。
我配置了以下“持久卷”和“持久卷声明”。
kind: PersistentVolume
apiVersion: v1
metadata:
name: store-persistent-volume
namespace: test
spec:
storageClassName: hostpath
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/Volumes/Data/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: store-persistent-volume-claim
namespace: test
spec:
storageClassName: hostpath
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
以及以下部署和服务配置。
kind: Deployment
apiVersion: apps/v1beta2
metadata:
name: store-deployment
namespace: test
spec:
replicas: 1
selector:
matchLabels:
k8s-app: store
template:
metadata:
labels:
k8s-app: store
spec:
volumes:
- name: store-volume
persistentVolumeClaim:
claimName: store-persistent-volume-claim
containers:
- name: store
image: …Run Code Online (Sandbox Code Playgroud) Helm Chart 有 Version 和 appVersion 的概念。
我们使用版本来记录 Helm Chart 的内容是否发生更改(例如,模板、deployment.yaml 具有新的 Envrionment 值或 configmap.yaml 具有附加值),对于这些场景,版本号应该增加。我们正在使用 appVersion 来记录 docker 映像标签更改(因此业务应用程序的实际版本,我知道可以有多个容器映像,但我们能够将其中一个识别为主应用程序并使用其标签)...
现在,在我们的开发过程中,可以有多个业务应用程序的有效映像(功能开发,例如功能1、功能2、功能3),因此我们可以拥有如下所示的星座,[Helm Chart: myChart Version: 5.1 appVersion: feature1 ], [Helm Chart: myChart 版本: 5.1 appVersion: feature2], [Helm Chart: myChart 版本: 5.1 appVersion: feature3] 大多数部署都是自动化的,但有时我们不得不说有人部署了 feature2。
现在,困境来了,在我们的 Helm 存储库中,我们将拥有这 3 个图表。
5.1->feature1
5.1->feature2
5.1->feature3
Run Code Online (Sandbox Code Playgroud)
但是当我查看 Helm 命令“Helm Install”、“Helm Upgrade”、“Helm Pull”时,我只看到“--version”作为参数,但没有“--appVersion”,因此无法安装
helm upgrade -i myChartFeature2 myChart --version 5.1 --appVersion feature2
Run Code Online (Sandbox Code Playgroud)
我们不想对我们的图表进行版本控制,“5.1.0-feature1”,因为这样我们就会失去识别能力,当模板中的某些内容发生变化时我们有一个新的图表,或者当业务逻辑发生变化时我们有一个新版本...
所以我的问题是
谢谢各位的解答...
我对 kafka 文档中关于这个主题的措辞有点困惑,所以我想在这里问我是否正确地解释了这些内容?
因此,如果我正确理解这种扩展 Kafka Stream 应用程序的唯一方法是启动应用程序的新实例(或增加 application 中的流线程数量),这将确保 ConsumerGroup('application. id'),这样我就可以将流应用程序扩展到主题的分区数量(如果我的流拓扑连接到多个主题,实际上会发生什么,假设 TopicA 有 5 个分区,topicB 有 3 个分区,我加入了 TopicA 和 TopicB 的流,我猜在这种情况下我可以扩展到 3 个实例/线程)。
现在假设我有一个包含 5 个分区的 topicA,并且启动了应用程序的 3 个实例,如果我在拓扑中配置了 KTable,则每个 KTable 将包含来自特定分区的信息,并且我必须找出我的哪个实例(分区)上的元数据关键是,那么当我启动第四个实例时会发生什么,假设实例3上的KTable的键/值现在可以转到实例4上的KTable,不是吗?一方面问题是这样的重新平衡需要多长时间(我认为这取决于主题大小,所以假设需要 1 分钟,我正在查询 KTable 的应用程序在此操作期间会没有响应吗?)
附带问题是,此机制对于“streamBuilder.table(..)”和“streambuilder.groupByKey(..).reduce(..)”的工作原理是否完全相同?
最后一个问题,同样是一个具有 5 个分区的主题,但我没有启动 3 个应用程序实例,而是启动了一个具有 3 个流线程的实例 (num.stream.threads = 3),我会再次拥有 3 个 KTable 代表 5 个分区吗?如果我将线程大小从 3 更改为 4,其行为与增加实例数完全相同。
感谢您的回答..