小编Yan*_*fan的帖子

为什么Netty 4"代理"示例必须将通道"AUTO_READ"设置为false

在Netty 4 "代理"示例中,通道自动读取选项已被禁用:

serverBootStrap.group(bossGroup, workerGroup)
    ...
    .childOption(ChannelOption.AUTO_READ, false)
Run Code Online (Sandbox Code Playgroud)

如果注释childOption(ChannelOption.AUTO_READ, false),代理示例将无法工作.更详细的是,在channelRead类的方法中HexDumpProxyFrontendHandler,outboundChannel将始终处于非活动状态.

我研究过Netty源代码,发现"自动读取"会影响方法fireChannelActivefireChannelReadComplete类的DefaultChannelPipeline

if (channel.config().isAutoRead()) {
    read();
}
Run Code Online (Sandbox Code Playgroud)

但我仍然无法弄清楚自动读取和代理示例之间的关系.在我看来,当数据发送到入站缓冲区时,Netty应该触发通道读取事件.

所以有两个问题:

  • 为什么禁用自动读取是"代理"示例所必需的?
  • 为什么启用自动读取会使outboundChannel总是无效?

java netty

8
推荐指数
1
解决办法
2904
查看次数

如何使用 kotlinx-coroutines-reactive 处理 null 场景?

kotlinx-coroutines-reactive使得org.reactivestreams.PublisherawaitXXX方法:

val person = peopleReactiveRepository.findById(personId).awaitSingle()
Run Code Online (Sandbox Code Playgroud)

如果通过人员 ID 无法找到人员,则该调用将抛出 NoSuchElementException,并且该异常无法在用户代码中直接处理。并且 Spring MVCExceptionHandler无法将此异常转换为用户友好的响应。

java.util.NoSuchElementException: No value received via onNext for awaitSingle
at kotlinx.coroutines.experimental.reactive.AwaitKt$awaitOne$$inlined$suspendCancellableCoroutine$lambda$1.onComplete(Await.kt:131) ~[kotlinx-coroutines-reactive-0.22.1.jar:na]
at reactor.core.publisher.StrictSubscriber.onComplete(StrictSubscriber.java:123) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:1327) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onComplete(FluxHide.java:137) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:130) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at reactor.core.publisher.MonoNext$NextSubscriber.onComplete(MonoNext.java:96) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE]
at com.mongodb.reactivestreams.client.internal.ObservableToPublisher$1.onComplete(ObservableToPublisher.java:78) ~[mongodb-driver-reactivestreams-1.6.0.jar:na]
Run Code Online (Sandbox Code Playgroud)

我能想到的方法之一如下:

val person = peopleRepository.findById(personId).awaitFirstOrDefault(null)

if (person == null) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

但我不认为这是一种优雅的方式。例如,可以提供名为 的方法awaitSingleOptional

Kotlin 有没有更好的方法来处理这种情况?

kotlin kotlinx.coroutines

7
推荐指数
1
解决办法
5478
查看次数

通过systemd启用CoreOS中的etcd服务自动启动

我已经使用VMware映像部署了CoreOS standealone服务器,请按照本指南体验CoreOS.

部署成功后,我发现我的CoreOS只启用了Docker服务,没有运行etcd和fleet服务.虽然我知道如何使用systemd手动运行etcd和fleet服务.而且我也知道使用合适的cloud-config可以安装CoreOS,其中etcd和fleet服务自动启动.

但我想知道:

  1. 是否可以将单元文件放入/etc/systemd/system以使systemd自动启动etcd服务?
  2. 如果可以,单位文件的内容是什么?
  3. 如果不能,那么另一种方式是什么?

谢谢

systemd docker coreos etcd

4
推荐指数
1
解决办法
4100
查看次数

JSON 前缀有什么用?

我知道这是一个愚蠢的问题,但我没有找到谷歌预期的答案。Spring MVC 4.3的新功能之一是支持配置JSON前缀

<mvc:message-converters>
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="jsonPrefix" value=")]}',\n" />
    </bean>
</mvc:message-converters>
Run Code Online (Sandbox Code Playgroud)

因此 JSON 输入/输出可能如下所示:

)]}',\n"{\"userName\":\"ABC\",\"emailId\":\"ABC@gmail.com\"}"
Run Code Online (Sandbox Code Playgroud)

我知道这是出于安全目的。但具体是关于什么呢?

java spring json spring-mvc

3
推荐指数
1
解决办法
5876
查看次数

JMS消息ID各部分的含义是什么?

JMS 消息 ID 如下所示ID:10.77.42.209-4280-1477454185311-1:1:1391:1:1。整个字符串被“-”和“:”分成几个部分。

显然,一部分代表生产者的IP地址,一部分可能代表消息ID。但别人有什么办法呢?

所以我的问题是每个部分的含义是什么?

使用ActiveMQ并且没有自定义消息ID

java activemq-classic jms

2
推荐指数
1
解决办法
2625
查看次数

为什么 Kotlin 类不再需要在 Spring Boot 中打开

在有关 Kotlin 和 Spring Boot 的最新视频中:Spring Tips: Bootiful Kotlin Redux。Spring Boot 的类Application如下所示:

class SpringBootKotlinApplication

fun main(args: Array<String>) {

}
Run Code Online (Sandbox Code Playgroud)

我记得 Kotlin 必须像openSpring Boot 中那样进行注释。

open class SpringBootKotlinApplication
Run Code Online (Sandbox Code Playgroud)

看这个视频

open那么为什么现在不需要注释呢?Spring Boot 现在需要扩展 Application 类吗?

spring kotlin

1
推荐指数
1
解决办法
1756
查看次数