Mule 为什么赢了';当配置了多个全局HTTP连接器时,REST组件是否未接收应用程序内部发出的调用?

Mule 为什么赢了';当配置了多个全局HTTP连接器时,REST组件是否未接收应用程序内部发出的调用?,mule,mule-studio,cloudhub,Mule,Mule Studio,Cloudhub,我正在努力配置并部署一个带有多个全局HTTP连接器和REST组件的应用程序到CloudHub 我的应用程序有两个流:一个轮询RSS提要以获取新闻,并将该提要的json表示发布到同一应用程序中的http入站端点(端点位于第二个流上)。第二个流接收该帖子,执行一些神奇的操作,包括将项目持久化到存储,然后通过http出站端点通知外部node.js web应用程序通过web套接字将项目推送到活动客户端 我已经尝试了几十种不同的配置,包括各种HTTP全局连接器和HTTP入站和出站端点,但我无法让一切都正常

我正在努力配置并部署一个带有多个全局HTTP连接器和REST组件的应用程序到CloudHub

我的应用程序有两个流:一个轮询RSS提要以获取新闻,并将该提要的json表示发布到同一应用程序中的http入站端点(端点位于第二个流上)。第二个流接收该帖子,执行一些神奇的操作,包括将项目持久化到存储,然后通过http出站端点通知外部node.js web应用程序通过web套接字将项目推送到活动客户端

我已经尝试了几十种不同的配置,包括各种HTTP全局连接器和HTTP入站和出站端点,但我无法让一切都正常工作。我目前有:

  • 轮询HTTP连接器
    • HTTP端点引用上面的轮询HTTP连接器以获取RSS提要
  • 一个全局连接器(我们称之为HTTP_One)在
    localhost:${HTTP.port}
    • http oubound端点,配置为引用http_ONE并将活动发布到/api/v1/activity
    • 配置为接收
      /api/v1
      消息的http入站端点和位于该端点后面的Jersey控制器,该端点执行
      /activity
  • 另一个全局连接器(HTTP_TWO),外部主机设置为代理主机名(例如somehost.somewhere.com)。
    • 配置为向somehost.somewhere.com发布消息的http出站端点
  • 在我的本地主机上,我不得不使用各种属性来允许在笔记本电脑的多个端口上进行所有这些活动

    在CloudHub上,除了调用外部web服务的oubound端点之外,我在任何地方都使用localhost和${http.port}

    我可以让一个流或另一个流工作,但不能两者都工作。。。。我的问题似乎是将给定的新闻项目从RSS提要发布到入站HTTP端点。它正在将帖子发送到
    http://localhost:80/api/v1/activity
    ,但是连接器说不存在这样的路径(它只将/api/v1列为一个选项),这使我认为调用没有到达位于全局连接器后面的Jersey控制器和
    /api/v1/activity
    的http入站端点。这种行为是使用REST组件和多个全局http连接器时的固有缺陷吗?另外,为什么在进行出站调用时必须引用全局HTTP连接器?为什么我们不能使用默认的HTTP连接器?(也许最后两个问题应该放在后面的帖子中…)

    这是两个流的大部分相关配置:

    全球连接器

    <http:polling-connector name="PollingHttpConnector" pollingFrequency="60000" doc:name="HTTP Polling" clientSoTimeout="10000" cookieSpec="netscape" receiveBacklog="0" receiveBufferSize="0" sendBufferSize="0" serverSoTimeout="10000" socketSoLinger="0" validateConnections="true"/>
    <http:connector name="EduStream_HTTP" cookieSpec="netscape" validateConnections="true" sendBufferSize="0" receiveBufferSize="0" receiveBacklog="0" clientSoTimeout="10000" serverSoTimeout="10000" socketSoLinger="0" proxyHostname="${edustream.host}"  doc:name="HTTP\HTTPS" proxyPort="80"/>
    <http:connector name="EduStreamESB_HTTP" cookieSpec="netscape" validateConnections="true" sendBufferSize="0" receiveBufferSize="0" receiveBacklog="0" clientSoTimeout="10000" serverSoTimeout="10000" socketSoLinger="0" proxyHostname="localhost" proxyPort="${http.port}" doc:name="HTTP\HTTPS"/>
    
    
    
    新闻RSS提要流

    <flow name="ucdNewsConsumer" doc:name="ucdNewsConsumer">
        <http:inbound-endpoint address="http://news.ucdavis.edu/xml/getnews.php/rss/category/General%20Interest" 
            connector-ref="PollingHttpConnector" doc:name="HTTP" exchange-pattern="one-way"/>
        <rss:feed-splitter/>
        <rss:entry-last-updated-filter/>  
        <component class="edu.ucdavis.edustream.esb.news.rss.EntryReceiver" doc:name="Java"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="${http.port}" path="api/v1/activity"    doc:name="HTTP"  mimeType="application/json" connector-ref="EduStreamESB_HTTP" />
        <logger message="Payload is: #[payload] Inbound Headers:  #[headers:INBOUND:*] Outbound Headers:  #[headers:OUTBOUND:*] Exception is:  #[exception]" level="INFO" doc:name="Logger"/>
    </flow>
    
    <flow name="edustreamesbFlow1" doc:name="edustreamesbFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="${http.port}" doc:name="HTTP" contentType="application/json" mimeType="application/json" path="api/v1" connector-ref="EduStreamESB_HTTP"/>
        <jersey:resources doc:name="REST">
            <component class="edu.ucdavis.edustream.esb.activity.restapi.ActivityController"/>
        </jersey:resources>
        <component class="edu.ucdavis.edustream.esb.activity.restapi.JerseyResponseTransformer" doc:name="JerseyRespTrans"/>
    
        <flow-ref name="PublishActivity" doc:name="Publish Activity"/>         
    </flow>
    <sub-flow name="PublishActivity" doc:name="PublishActivity">
        <component doc:name="ActivityService">
            <spring-object bean="activityService"/>
        </component>
        <logger message="#[payload] #[message]" level="INFO" doc:name="Logger"/>
        <http:outbound-endpoint exchange-pattern="request-response" host="${edustream.host}" port="80" path="api/v1/activity" mimeType="application/json" contentType="application/json" doc:name="HTTP" connector-ref="EduStream_HTTP"/>
    </sub-flow>
    
    
    
    活动发布服务——核心流程

    <flow name="ucdNewsConsumer" doc:name="ucdNewsConsumer">
        <http:inbound-endpoint address="http://news.ucdavis.edu/xml/getnews.php/rss/category/General%20Interest" 
            connector-ref="PollingHttpConnector" doc:name="HTTP" exchange-pattern="one-way"/>
        <rss:feed-splitter/>
        <rss:entry-last-updated-filter/>  
        <component class="edu.ucdavis.edustream.esb.news.rss.EntryReceiver" doc:name="Java"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="${http.port}" path="api/v1/activity"    doc:name="HTTP"  mimeType="application/json" connector-ref="EduStreamESB_HTTP" />
        <logger message="Payload is: #[payload] Inbound Headers:  #[headers:INBOUND:*] Outbound Headers:  #[headers:OUTBOUND:*] Exception is:  #[exception]" level="INFO" doc:name="Logger"/>
    </flow>
    
    <flow name="edustreamesbFlow1" doc:name="edustreamesbFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="${http.port}" doc:name="HTTP" contentType="application/json" mimeType="application/json" path="api/v1" connector-ref="EduStreamESB_HTTP"/>
        <jersey:resources doc:name="REST">
            <component class="edu.ucdavis.edustream.esb.activity.restapi.ActivityController"/>
        </jersey:resources>
        <component class="edu.ucdavis.edustream.esb.activity.restapi.JerseyResponseTransformer" doc:name="JerseyRespTrans"/>
    
        <flow-ref name="PublishActivity" doc:name="Publish Activity"/>         
    </flow>
    <sub-flow name="PublishActivity" doc:name="PublishActivity">
        <component doc:name="ActivityService">
            <spring-object bean="activityService"/>
        </component>
        <logger message="#[payload] #[message]" level="INFO" doc:name="Logger"/>
        <http:outbound-endpoint exchange-pattern="request-response" host="${edustream.host}" port="80" path="api/v1/activity" mimeType="application/json" contentType="application/json" doc:name="HTTP" connector-ref="EduStream_HTTP"/>
    </sub-flow>
    

    我不明白为什么
    proxyHostname
    proxyPort
    都配置在
    EduStream\u HTTP
    edustreams\u HTTP
    连接器上,而这些连接器的HTTP端点将同一主机/端口作为其目标地址。这对我来说毫无意义

    你真的确定你需要使用代理吗

    对于
    edutravelsb_HTTP
    来说,答案显然是否定的:您正在从CloudHub调用CloudHub,因此不需要代理


    对于HTTP教育流,可能。。。但这似乎仍然很奇怪。

    为什么在同一个应用程序中使用HTTP进行通信?核心流需要一个用于外部客户端的REST API。我只是将该端点用于将应用程序中相同类型的消息提供给核心流的其他流。我已经考虑过使用VM传输从同一个Mule应用程序中生成的所有核心流的消息,但我想我仍然在试图理解为什么不能用HTTP实现这一点……这导致了下面的错误。我已将所有内容设置为${http.port}。但是,在我部署到CloudHub之后,轮询连接器的http端点会一直恢复到端口的8081。我几乎不认为这有什么关系,除了8081一直出现在异常中:
    异常是:org.mule.api.transport.DispatchException:无法通过端点路由事件:DefaultOutboundEndpoint{endpointUri=http://localhost:8081/api/v1/activity,connector=HttpConnector{name=HTTP\u HTTPS\u通用支持协议=[HTTP]serviceOverrides=},name='endpoint.http.localhost.8081.api.v1.activity',mep=REQUEST\u-RESPONSE,properties={Content-Type=application/json},transactionConfig=Transaction{factory=null,action=interference,timeout=0},endpointEncoding=UTF-8,disableTransportTransformer=false}。消息有效负载的类型为:PostMethod
    这也显示在日志中:WARN 04-08-13 16:06:09在连接器上未找到二次查找的接收器:带URI键的EdutravelSB_HTTP:WARN 04-08-13 16:06:09连接器上的接收器为:{This=3c8b22e5,receiverKey=,endpoint=}这没有意义,因为您的
    http://localhost:8081/api/v1
    所以调用
    http://localhost:8081/api/v1/activity
    应收到。完整配置。发布配置的最佳方式是什么?作为评论(这似乎是限制性的)还是作为对原始帖子的补充?