Kafka 为Wildfly添加内存中的smallrye-in-memory连接器(减少开发过程中的重新部署时间)

pn9klfpd  于 2023-06-28  发布在  Apache
关注(0)|答案(1)|浏览(107)

在开发过程中,重新部署时间是至关重要的,所以尽可能地消除它会更好。在我的Jakarta EE10.war项目中,我通过microprofile reactive streams将10个通道连接到Kafka主题。我之前通过Docker提出了Kafka,并将.war部署到使用smallrye-reactive-messagingWildfly 28.0.1。通道在部署完成后连接,这只需要很短的时间。
但是在取消部署时,通道被一个接一个地同步关闭,并且总时间高达10秒。我检查了是否有可能通过定义更短的超时或其他方法来减少这个时间。但是我没有找到任何可以在这里配置的东西。
所以我的问题是,是否可以将smallrye-in-memory连接器添加到Wildfly并在开发过程中使用它?这也将减少开发过程中对运行的Kafka的依赖。

hwamh0ep

hwamh0ep1#

是的,可以通过将smallrye-in-memory连接器作为模块添加到Wildfly来完成。不幸的是,有几个步骤要做:
1.将beans.xml添加到smallrye-reactive-messaging-in-memory-4.5.0.jar META-INF目录,命名为smallrye-reactive-messaging-in-memory-4.5.0-beans.jar(名称不重要)。需要此步骤,以便可以通过CDI将 io.smallrye.reactive.messaging.memory.InMemoryConnector 注入到 io.smallrye.reactive.messaging.providers.impl.ConnectorFactories
1.通过 jboss-cli.sh 向Wildfly添加模块mutiny和zero-flow-adapters:
module add --name=io.smallrye.reactive.mutiny.zero-flow-adapters --resources=mutiny-zero-flow-adapters-1.0.0.jar --dependencies=org.reactivestreams
module add --name=io.smallrye.reactive.mutiny.zero --resources=mutiny-zero-1.0.0.jar
1.将 smallrye-reactive-messaging-in-memory-4.5.0-beans.jar 复制到${WILDFLY_HOME}/modules/io/smallrye/reactive/messaging/connector/inmemory/main并创建module.xml。也许这可以通过 * jboss-cli.sh * 完成,但不幸的是,我没有找到如何指定 optionalservices 属性。这是衣柜answer

<module xmlns="urn:jboss:module:1.1" name="io.smallrye.reactive.messaging.connector.inmemory">

    <resources>
        <resource-root path="smallrye-reactive-messaging-in-memory-4.5.0-beans.jar"/>
    </resources>

    <dependencies>
        <module name="io.smallrye.config" services="import"/>
        <module name="io.smallrye.common.annotation"/>
        <module name="io.smallrye.reactive.converters.api"/>
        <module name="io.smallrye.reactive.messaging"/>
        <module name="io.smallrye.reactive.mutiny"/>
        <module name="io.smallrye.reactive.mutiny.reactive-streams-operators"/>
        <module name="javax.annotation.api"/>
        <module name="javax.enterprise.api"/>
        <module name="org.eclipse.microprofile.reactive-messaging.api"/>
        <module name="org.eclipse.microprofile.reactive-streams-operators.api"/>
        <module name="org.eclipse.microprofile.reactive-streams-operators.core" services="import"/>
        <module name="org.eclipse.microprofile.config.api"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.weld.api"/>
        <module name="org.jboss.weld.core"/>
        <module name="org.jboss.weld.spi"/>
        <module name="org.reactivestreams"/>
        <module name="org.wildfly.reactive.messaging.config" optional="true" export="true" services="export"/>
        <module name="org.slf4j"/>
        <module name="io.smallrye.reactive.mutiny.zero"/>
        <module name="io.smallrye.reactive.mutiny.zero-flow-adapters"/>
    </dependencies>
</module>
`module add --name=io.smallrye.reactive.messaging.connector.inmemory --resource=smallrye-reactive-messaging-in-memory-4.5.0-beans.jar --dependencies=io.smallrye.config,io.smallrye.common.annotation,io.smallrye.reactive.messaging,io.smallrye.reactive.mutiny,io.smallrye.reactive.converters.api,org.jboss.logging`

1.在 ${WILDFLY_HOME}/modules/system/layers/base/io/smallrye/reactive/messaging/connector/main/module.xml 中添加 io.smallrye.reactive.messaging.connector.inmemory 作为依赖项:

<module name="io.smallrye.reactive.messaging.connector" xmlns="urn:jboss:module:1.9">
    ...

    <dependencies>
        ...
        <module name="io.smallrye.reactive.messaging.connector.inmemory" optional="false" export="true" services="export"/>
    </dependencies>
</module>

您现在应该看到调试输出和找到的内存连接器:

DEBUG [io.smallrye.reactive.messaging.provider] (MSC service thread 1-2) SRMSG00226: Found incoming connectors: [smallrye-in-memory, smallrye-kafka]
DEBUG [io.smallrye.reactive.messaging.provider] (MSC service thread 1-2) SRMSG00227: Found outgoing connectors: [smallrye-in-memory, smallrye-kafka]

现在你可以在你的配置中使用它了。microprofile-config.properties:
mp.messaging.incoming.<channel>.connector=smallrye-in-memory
mp.messaging.outgoing.<channel>.connector=smallrye-in-memory

相关问题