国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從URI創建artemis core的ServerLocator實例過程的思考

wuaiqiu / 1637人閱讀

摘要:類是一個模板類,用戶可以指定需要通過創建的對象的類型,以及創建對象時需要傳入的參數類型。它的職責是提供通過創建相應對象的具體策略。后記本文主要是講解從創建的實例過程,所以不對作過多講解,這兒只給出所處位置接口位于模塊中的命名空間下。

背景

broker.xml中有這么一段:


    
    tcp://localhost:61618

那么,artemis中是如何將URI“tcp://localhost:61618”解析成ServerLocator的呢?

URI工廠

在artemis中,URI的處理,是通過URIFactory類進行加工的。
URIFactory類位于artemis-commons包中的org.apache.activemq.artemis.utils.uri命名空間下,它的主要功能是注冊URISchema、委托URISchema創建相應的對象。URIFactory類是一個模板類,用戶可以指定需要通過URI創建的對象的類型T,以及創建對象時需要傳入的參數類型P。比如我們想要通過URI創建ServerLocator類型的對象,則T傳入ServerLocator接口類型,P傳入String類型。如其名稱,它采用的是工廠方法設計模式。同時它還隱藏了策略模式,通過注冊URISchema方法,引入包含通過URI創建相應對象的策略的URISchema,將創建對象的策略委托給了URISchema。

URI工廠中的策略

具體注冊URISchema策略的執行者是ServerLocatorParser類。該類位于artemis-core-client模塊中的org.apache.activemq.artemis.uri命名空間下。該類的構造函數,直接注冊了4中策略:InVM、TCP、UDP、JGroup四種SchemaURI解析及策略。

    public ServerLocatorParser() {
      registerSchema(new InVMServerLocatorSchema());
      registerSchema(new TCPServerLocatorSchema());
      registerSchema(new UDPServerLocatorSchema());
      registerSchema(new JGroupsServerLocatorSchema());
   }

策略的載體——URISchema類,位于artemis-commons包中的org.apache.activemq.artemis.utils.uri命名空間下。它也是一個模板類,,用戶可以指定需要通過URI創建的對象的類型T,以及創建對象時需要傳入的參數類型P。它的職責是提供通過URI創建相應對象的具體策略。

URISchema類是策略接口的定義,其實現類InVMServerLocatorSchema、TCPServerLocatorSchema、UDPServerLocatorSchema、JGroupsServerLocatorSchema,是具體策略的實現。四個具體策略的實現類,位于artemis-commons包中的org.apache.activemq.artemis.uri.schema.serverLocator命名空間下。

URI策略-TCP策略的實現

URISchema類采用了模板方法模式,其中要求子類必須實現internalNewObject抽象方法。我們以TCPServerLocatorSchema這個子類為例來看看它是如何實現internalNewObject抽象方法的。代碼如下:

    ConnectionOptions options = newConnectionOptions(uri, query);

    List configurations = TCPTransportConfigurationSchema.getTransportConfigurations(uri, query, TransportConstants.ALLOWABLE_CONNECTOR_KEYS, name, NettyConnectorFactory.class.getName());
    TransportConfiguration[] tcs = new TransportConfiguration[configurations.size()];
    configurations.toArray(tcs);
    if (options.isHa()) {
       return ActiveMQClient.createServerLocatorWithHA(tcs);
    } else {
       return ActiveMQClient.createServerLocatorWithoutHA(tcs);
    }

可見它主要是利用了TCPTransportConfigurationSchema的靜態方法getTransportConfigurations,來根據uri解析得到TransportConfiguration對象列表,然后使用ActiveMQClient工具類的createServerLocatorWithHA或createServerLocatorWithoutHA類創建ServerLocator接口實例的。

后記

本文主要是講解從URI創建artemis core的ServerLocator實例過程,所以不對ServerLocator作過多講解,這兒只給出ServerLocator所處位置:
ServerLocator接口位于artemis-core-client模塊中的org.apache.activemq.artemis.api.core.client命名空間下。
兩個實現類,ServerLocaorInternal類和ServerLocatorImpl類,位于artemis-core-client模塊中的org.apache.activemq.artemis.api.core.client.impl命名空間下。

相關模塊、命名空間和類的匯總參考

artemis-commons

org.apache.activemq.artemis.utils.uri
    URIFactory
    URISchema
org.apache.activemq.artemis.uri.schema.serverLocator
    InVMServerLocatorSchema
    TCPServerLocatorSchema
    UDPServerLocatorSchema
    JGroupsServerLocatorSchema

artemis-core-client

org.apache.activemq.artemis.uri
    ServerLocatorParser
org.apache.activemq.artemis.api.core
    TransportConfiguration
org.apache.activemq.artemis.api.core.client
    ServerLocator
    ActiveMQClient
org.apache.activemq.artemis.api.core.client.impl
    ServerLocaorInternal
    ServerLocatorImpl

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/35805.html

相關文章

  • Spring Boot 參考指南(消息傳遞)

    摘要:還自動配置發送和接收消息所需的基礎設施。支持是一個輕量級的可靠的可伸縮的可移植的消息代理,基于協議,使用通過協議進行通信。 32. 消息傳遞 Spring框架為與消息傳遞系統集成提供了廣泛的支持,從使用JmsTemplate簡化的JMS API到使用完整的基礎設施異步接收消息,Spring AMQP為高級消息隊列協議提供了類似的特性集。Spring Boot還為RabbitTempla...

    Doyle 評論0 收藏0
  • ArtemisJMS客戶端中CompletionHandler是如何在artemis core

    摘要:在公開的方法中,為的設置了繼承于回調句柄。如此看來,如果想要異步通信完畢后,處理一些回調,則只需實現,并在適當的位置設置到的的里。在其保護方法里,創建了對象,并傳入了。 ActiveMQChannelHandler NettyConnector在公開的start方法中,為Channel的pipeline設置了ActiveMQChannelHandler(繼承于io.netty.chan...

    Edison 評論0 收藏0
  • 使用Spring/Spring Boot集成JMS陷阱

    摘要:本文旨在指出中集成的一些性能陷阱,在另一篇文章各組件詳解里有組件介紹及如何正確使用的內容。因此的做法會大大降低性能,并且將大部分的時間都花在反復重建這些對象上。提供的可以讓使用避免頻繁創建的問題。至于使用的性能測試則留給同學自己做了。 Github 本文旨在指出Spring/Spring Boot中集成JMS的一些性能陷阱,在另一篇文章Spring JMS各組件詳解里有Spring J...

    xcold 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<