Java Akka Camel websocket客户端生产商

Java Akka Camel websocket客户端生产商,java,apache-camel,akka,Java,Apache Camel,Akka,我正在尝试使用ApacheCamel AHC websocket组件和Java中的Akka Camel与websocket服务器通信。在本例中,websocket端点将是众所周知的websocket公共 使用: JDK8.x 带有Akka Camel、Akka Actor和Akka SLF4J的Akka Java API2.3.9 带有AHC WS组件的Apache Camel2.14.1 我学习了位于上世纪90年代的Akka Camel Java教程 简短描述:当我发出请求时,untype

我正在尝试使用ApacheCamel AHC websocket组件和Java中的Akka Camel与websocket服务器通信。在本例中,websocket端点将是众所周知的websocket公共

使用:

  • JDK8.x
  • 带有Akka Camel、Akka Actor和Akka SLF4J的Akka Java API2.3.9
  • 带有AHC WS组件的Apache Camel2.14.1
我学习了位于上世纪90年代的Akka Camel Java教程

简短描述:当我发出请求时,
untypedProducer
收到的每个响应都返回
CamelMessage
,其中
正文
字段为
null
。但是当我通过
ProducerTemplate
发出请求时,我收到了正确的响应

长描述:当我发出请求并期望来自websocket端点的响应时,我从Akka Camel得到了奇怪的行为。当我通过定义的ActorRef向端点发出请求时,例如:

ActorRef wsProducer = getContext().actorOf(SimpleProducer.props("ahc-ws:echo.websocket.org"));

final Timeout timeout = new Timeout(3, TimeUnit.MINUTES);
final Future<Object> future = Patterns.ask(wsProducer, "Please, respond!", timeout);
final Object result = Await.result(future, timeout.duration());
它工作正常,结果将包含正确的响应主体:
“Alpha在那里!”

我的
SimpleProducer
与教程中的内容基本相同:

public class SimpleProducer extends UntypedProducerActor {
    private final LoggingAdapter LOG = Logging.getLogger(getContext().system(), this);

    private final String mEndpointUri;

    public SimpleProducer(final String serverUrl) {
        mEndpointUri = serverUrl;
    }

    @Override
    public String getEndpointUri() {
        return mEndpointUri;
    }

    @Override
    public Object onTransformResponse(Object message) {
        return super.onTransformOutgoingMessage(message);
    }

    @Override
    public boolean isOneway() {
        return false;
    }

    public static Props props(final String endpointUri) {
        return Props.create(new Creator<SimpleProducer>() {
            private static final long serialVersionUID = 1L;

            @Override
            public SimpleProducer create() throws Exception {
                return new SimpleProducer(endpointUri);
            }
        });
    }
}
公共类SimpleProducer扩展了非类型Producer{
private final LoggingAdapter LOG=Logging.getLogger(getContext().system(),this);
私有最终字符串;
公共SimpleProducer(最终字符串serverUrl){
mEndpointUri=serverUrl;
}
@凌驾
公共字符串getEndpointUri(){
返回mEndpointUri;
}
@凌驾
公共对象onTransformResponse(对象消息){
返回super.onTransformOutgoingMessage(message);
}
@凌驾
公共布尔值isOneway(){
返回false;
}
公共静态道具道具(最终字符串endpointUri){
返回道具。创建(新创建者(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共SimpleProducer create()引发异常{
返回新的SimpleProducer(endpointUri);
}
});
}
}

也许有人也有同样的问题可以帮我解决

嗨,乔治。你找到解决问题的办法了吗?我遇到了类似的情况,找不到原因。如果您能抽出一分钟来分享您的经验,我将不胜感激。非常感谢!你好,塞吉奥。不幸的是,没有。然而,akka http将在某个时候包含websocket实现。。。
public class SimpleProducer extends UntypedProducerActor {
    private final LoggingAdapter LOG = Logging.getLogger(getContext().system(), this);

    private final String mEndpointUri;

    public SimpleProducer(final String serverUrl) {
        mEndpointUri = serverUrl;
    }

    @Override
    public String getEndpointUri() {
        return mEndpointUri;
    }

    @Override
    public Object onTransformResponse(Object message) {
        return super.onTransformOutgoingMessage(message);
    }

    @Override
    public boolean isOneway() {
        return false;
    }

    public static Props props(final String endpointUri) {
        return Props.create(new Creator<SimpleProducer>() {
            private static final long serialVersionUID = 1L;

            @Override
            public SimpleProducer create() throws Exception {
                return new SimpleProducer(endpointUri);
            }
        });
    }
}