标签: undertow

使用WildFly托管多个域(Undertow)

例如,我有两个域(app1.com,app2.com)和两个耳朵(app1.ear,app2.ear).每个EAR文件都包含ejb.jar和web.war.此外,每个WAR都有上下文根:/ app1/ app2.

所以,如果我开始WildFly我会对运行两个应用程序本地主机:8080/APP1本地主机:8080/APP 2.

如何将app1.com绑定到localhost:8080/app1app2.comlocalhost:8080/app2

据我了解,我应该在standalone.xml中修改Undertow子系统配置.我试过了:

<server name="default-server">
    <http-listener name="default" socket-binding="http"/>
    <host name="app1.com" default-web-module="app1.ear/web.war"/>
    <host name="app2.com" default-web-module="app2.ear/web.war"/>
</server>
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

java jboss virtualhost wildfly undertow

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

对服务器服务器的分块请求导致挂起状态

我有一个Undertow服务器,我正在运行默认值.我试图发送一个分块请求,当服务器接收块时,输入流服务器端永远不会达到-1状态并挂起.

我已经使用了Undertow服务器的默认值(我曾尝试增加线程数但仍然没有运气).

Undertow server = Undertow.builder()
            .addHttpListener(8080, "localhost")
            .setHandler(new HttpHandler() {
                @Override
                public void handleRequest(final HttpServerExchange exchange) throws Exception {
                    exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                    exchange.getResponseSender().send("Hello World");
                }
            })
            .setHandler(Handlers.routing().post("/xml", blockingHandler))
            .build();
    server.start();
Run Code Online (Sandbox Code Playgroud)

起初我试图使用普通的httpHandler,但是却引发了错误.

java.lang.IllegalStateException: UT000035: Cannot get stream as startBlocking has not been invoked
Run Code Online (Sandbox Code Playgroud)

经过一些研究后,我使用了Blockoverflow上的建议,然后使用了BlockingHandler.我不再收到上面的错误,但现在处理程序挂起.

这是处理程序的代码(为了清楚起见,我删除了异常处理):

HttpHandler httpHandler = new HttpHandler() {
        @Override
        public void handleRequest(HttpServerExchange exchange) throws Exception {

            StringBuilder builder = new StringBuilder( );

            try(InputStream inputStream = exchange.getInputStream()){

                int line;
                while( ( line = inputStream.read() ) != -1 ) { …
Run Code Online (Sandbox Code Playgroud)

java http chunked-encoding wildfly undertow

6
推荐指数
0
解决办法
887
查看次数

Netty 和 Undertow 之间的区别

我是 Netty 和 undertow 的新手,试图理解为什么我们使用 netty 而不是 undertow,性能方面哪个更好用

java netty spring-boot undertow reactor-netty

6
推荐指数
0
解决办法
6737
查看次数

WebSocketDeploymentInfo,将使用默认的worker

在我的 SpringBoot 应用程序日志中,我看到以下警告:

UT026009: XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used
UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
Run Code Online (Sandbox Code Playgroud)

从谷歌搜索看来,它们可能与 Undertow 提出的改进建议有关,但似乎不可能实施。

有没有人对这些有任何进一步的说明,也许还有关于如何使日志消失的建议,因为应用程序运行得很好?

spring-boot undertow

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

undertow 代理转储请求和响应主体

要使用 undertow 作为代理服务器来跟踪所有流量(调试目的所需),我目前正在使用如下代码片段:

Undertow.builder()
    .addHttpListener(8080, null)
    .setHandler(
        Handlers.requestDump(
            Handlers.proxyHandler(new SimpleProxyClientProvider(targeUri))
        )
    )
.build().start();
Run Code Online (Sandbox Code Playgroud)

这已经转储所有请求和响应标头。我正在寻找一种转储请求和响应主体的方法。关于如何与 ProxyHandler 结合实现这一点有什么想法吗?

java undertow

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

Docker 容器中的 Spring Boot 响应时间太长

我需要在 Docker 容器中运行 HTTP REST API(带有嵌入式 Undertow 服务器的 Spring Boot 应用程序),但是当我运行容器并使用基准加载它时,我的响应时间太长(<1000ms),但是当我运行我的刚刚从 IDE 运行的应用程序我在(<10ms)内收到响应,为什么我有这么大的差异?我的泊坞窗文件:

FROM openjdk:8-jdk-alpine
ADD run.sh run.sh
RUN chmod +x run.sh
ADD tmp/data/data.zip tmp/data/data.zip
ADD travels-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 80
CMD ["sh", "run.sh"]
Run Code Online (Sandbox Code Playgroud)

和 run.sh 从我运行应用程序的地方:

#!/bin/sh
echo "Unzipping data..."
mkdir -p /opt/
unzip -o /tmp/data/data.zip -d /opt/
echo "Starting server..."
java -Xmx3G -Xms3G -XX:+AggressiveOpts -server -Djava.security.egd=file:/dev/./urandom -jar app.jar --data.path=/opt/
Run Code Online (Sandbox Code Playgroud)

预先感谢您的帮助!

java docker spring-boot undertow

5
推荐指数
0
解决办法
2214
查看次数

Keycloak Redirect URI is adding port zero to the url

Encountered redirect_uri error in keycloak. Found same issue logged at JIRA KEYCLOAK-7237, just want to check any work around? Anyone can help? Thank you in advance.

2018-06-30 11:34:13,996 WARN [org.keycloak.events] (default task-8) type=LOGIN_ERROR, realmId=Victz, clientId=portal, userId=null, ipAddress=, error=invalid_redirect_uri, redirect_uri=https://www.example.com:0/home

I am using apache http reverse proxy running on centos7, wildly 10, keycloak 3.4.3. has also tried in below environment but same error.

Tried in wildly 10, wildly 11, jboss 7.1, Keycloak 3.4.3 as well as keycloak 4.0

Also …

reverse-proxy undertow keycloak wildfly-10 wildfly-11

5
推荐指数
2
解决办法
5664
查看次数

Springboot + undertow over SSL 100% CPU 使用率

我在几天前制作并投入生产的一个小网络应用程序中遇到了一些问题。当您访问应用程序并与其交互时,几分钟后就会立即崩溃(等待 SSL 握手的时间太长)。我使用 LetsEncrypt 证书。

问题似乎是 Undertow 在尝试使用SSLConduit.java类时阻塞了一些线程,这导致服务器的某些核心处于 100% 使用率。

服务器中的Java版本是:

openjdk version "11.0.2" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.2+7)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+7, mixed mode)
Run Code Online (Sandbox Code Playgroud)

SpringBoot版本是:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
Run Code Online (Sandbox Code Playgroud)

application.properties 文件:

server.port=9002
server.ssl.key-store=keystore.jks
server.ssl.key-store-password=password
server.ssl.key-password=password
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/example_db
spring.datasource.username=example_user
spring.datasource.password=password_db
Run Code Online (Sandbox Code Playgroud)

下流版本是:

在此输入图像描述

yourkit 正在告诉我们:

在此输入图像描述

在此输入图像描述 在此输入图像描述

我尝试放置另一个证书,但问题仍然存在。我不想更改为另一个网络服务器(但如果问题仍然存在,我会的)。有可能解决这个问题吗?或者我必须更改应用程序服务器?

编辑:github中的相关PR: https: //github.com/undertow-io/undertow/pull/721和JIRA中的问题:https://issues.jboss.org/browse/UNDERTOW-1493

java ssl spring-boot undertow

5
推荐指数
0
解决办法
1366
查看次数

Undertow 按应用程序属性设置每个连接的最大并发请求数

我的主要目标是设置 Undertow 的最大并发请求连接限制。

我尝试通过属性进行配置来设置它。但这不起作用。

  • application.yml undertow:工作线程:1 io线程:1选项:服务器:MAX_CONCURRENT_REQUESTS_PER_CONNECTION:1

我研究了如何限制每个请求的最大连接数,并发现以下内容:

为了限制 undertow 中的连接,有必要实现 RequestLimitHandler 和 RequestLimit。

“Request Limiting Handler 限制并发请求数量的处理程序。如果数量超过限制,请求将排队。如果队列已满,则请求将被拒绝。”

http://undertow.io/undertow-docs/undertow-docs-1.2.0/#built-in-handlers
Run Code Online (Sandbox Code Playgroud)

我已经尝试了下一个实现,但此处理程序不会限制请求,因为它不会返回错误 503 响应,而且我无法与 MVC 方法绑定。

1. Test case: 
     @Bean
        public UndertowServletWebServerFactory myUndertowServletWebServerFactory() {
            final UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();

            final HandlerWrapper handlerWrapperLimit = new HandlerWrapper() {

                @Override
                public HttpHandler wrap(final HttpHandler handler) {
                    final int maximumConcurrentRequests = 1;
                    final int queueSize = 100;

                    final RequestLimit requestLimit = new RequestLimit(maximumConcurrentRequests,
                        queueSize);


                    final RequestLimitingHandler limitHandler = new RequestLimitingHandler(requestLimit,
                        new ResponseCodeHandler(
                            StatusCodes.OK));

                    return limitHandler; …
Run Code Online (Sandbox Code Playgroud)

java spring-boot undertow

5
推荐指数
0
解决办法
2489
查看次数

更新到wildfly 18后直接缓冲内存OutOfMemoryError

将环境从 更新到 后,Wildfly 13我们Wildfly 18.0.1经历了

A channel event listener threw an exception: java.lang.OutOfMemoryError: Direct buffer memory
at java.base/java.nio.Bits.reserveMemory(Bits.java:175)
at java.base/java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:118)
at java.base/java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:317)
at org.jboss.xnio@3.7.3.Final//org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:57)
at org.jboss.xnio@3.7.3.Final//org.xnio.BufferAllocator$2.allocate(BufferAllocator.java:55)
at org.jboss.xnio@3.7.3.Final//org.xnio.ByteBufferSlicePool.allocateSlices(ByteBufferSlicePool.java:162)
at org.jboss.xnio@3.7.3.Final//org.xnio.ByteBufferSlicePool.allocate(ByteBufferSlicePool.java:149)
at io.undertow.core@2.0.27.Final//io.undertow.server.XnioByteBufferPool.allocate(XnioByteBufferPool.java:53)
at io.undertow.core@2.0.27.Final//io.undertow.server.protocol.http.HttpReadListener.handleEventWithNoRunningRequest(HttpReadListener.java:147)
at io.undertow.core@2.0.27.Final//io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:136)
at io.undertow.core@2.0.27.Final//io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:59)
at org.jboss.xnio@3.7.3.Final//org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
at org.jboss.xnio@3.7.3.Final//org.xnio.conduits.ReadReadyHandler$ChannelListenerHandler.readReady(ReadReadyHandler.java:66)
at org.jboss.xnio.nio@3.7.3.Final//org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:89)
at org.jboss.xnio.nio@3.7.3.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:591)
Run Code Online (Sandbox Code Playgroud)

应用程序方面没有任何改变。我查看了缓冲池,似乎有些资源没有释放。我触发了几次手动 GC,但几乎什么也没发生。(正常运行时间2小时)

缓冲池稳步增长

之前在旧配置中它看起来像这样(正常运行时间> 250小时):

正确释放的缓冲池

现在我做了很多研究,我能找到的最接近的就是这篇关于 SO 的文章。然而,这是与 websockets 结合使用的,但没有使用websockets。我读了几篇(好)文章1、2、3、4、5、6 观看了有关主题视频我尝试了以下方法,但没有任何效果:

  1. OutOfMemoryError 发生在 5GB 处,因为堆是 5GB …

java out-of-memory wildfly undertow java-11

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