2012-04-03 21 views
8

AMQP、SQL ServerおよびXA

  • スタンドアロン春3.1.0.RELEASEアプリケーション
  • 休止3.6.7.FinalとJPA
  • AMQP(RabbitMQのようクライアントとしてサーバー、春AMQP)私たちは、RabbitMQのAとの間の取引を同期する必要があるのjTDSドライバ

  • SQL Server 2008のSQL Serverを使用しているため、atomikosでXAをセットアップしようとしています。問題は、実際に動作しているその状況のた​​めの単一のスプリングサンプル構成ファイルを見つけることができないことです。私たちは、Springのドキュメンテーション、Google、フォーラムなどのサンプルを使って非常に多くの組み合わせを試しました。何かが欠けています。

    誰かが私たちの設定用のテンプレートとして使用できるように、このようなファイルを提供してもらえますか?

    P.S. 本当にXAが必要ですか?

    ありがとうございました。

  • +0

    いくつかのドキュメントを読むと、rabbitmqはXAをサポートしていないようです。今、私は本当に「完璧な」ソリューションになるかどうか不思議です... –

    +0

    同期レイヤーについて、[Change Data Capture](https://en.wikipedia.org/wiki/Change_data_capture)を検討しましたか? [このスレッド](http://stackoverflow.com/questions/9918519/generating-events-from-sql-server)は、散文でもう少し詳しく説明していますが、あなたの解答を深みやコードでカバーするものではありません。これがあなたの気分であれば、私はここでこれに答えてうれしいです。 :) – MrGomez

    答えて

    1

    様々な候補解(Change Data Captureの使用、SQL Server Service Broker用のアダプタ、およびMSMQからRabbitMQのに可能な変換)を掘り後、私はあなたのために働く必要があるソリューションに来ました。

    WCFクライアントとサービス契約をSQL Serverにバインドすることができます。ここから、RabbitMQ's AMQP binding for WCFを使用して、前述のPDFドキュメントと同様に、メッセージを前後に翻訳できます。

    ここではXAなどの追加のトランザクションマネージャが必要かどうかは不明ですが、トランザクションの重複、ループ、および不一致に問題がある場合は、接続の仲介者として検討する価値があります。あなたがそのルートに行くなら、あなたはあなたが問題のステートメントで定義したのと同じ方法であなたのゲートウェイにそれを溶接する必要があります。これに明確化が必要な場合は、私はここでこれを拡張することができます。

    あなたのアプリケーションに最適です。外部からのインテグレーション・ヒドラのように聞こえますが、一度すべてのことを話すとうまくいくはずです。

    +0

    私たちのアプリケーションはJavaベースなので、私はWCFをどのように(そしてなぜ)使うべきか分かりません。 今のところ、データベースとメッセージのコミットを制御するためのクラスのカスタムセットを構築しています。 –

    +0

    @bosnic RabbitMQとSQL Server間の通信をブリッジするための、RabbitMQのAMQPバインディングへのインターフェイスとしてSQL Server用の標準WCF機能を使用することを考えます。これは非常によく文書化されています(http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v1.5.1/rabbitmq-dotnet-client-1.5.1-wcf-service-model.pdf)。 RabbitMQ側でJavaのアプリケーションプログラミングをすべて維持することができます。少なくとも、あなたの目標を正しく理解すれば、私はそれをどのように見ているのですか? – MrGomez

    0

    私が知っているように、RabbitMQ がXAスタイルのトランザクションをサポートしていません。

    そして、はい、あなたはJavaでそれを行うことができます。

    TestConfiguration.java

    import org.springframework.amqp.core.Queue; 
    import org.springframework.amqp.rabbit.config.AbstractRabbitConfiguration; 
    import org.springframework.amqp.rabbit.connection.ConnectionFactory; 
    import org.springframework.amqp.rabbit.connection.SingleConnectionFactory; 
    import org.springframework.amqp.rabbit.core.RabbitTemplate; 
    import org.springframework.context.annotation.Bean; 
    import org.springframework.context.annotation.Configuration; 
    
    @Configuration 
    public class TestConfiguration extends AbstractRabbitConfiguration { 
    
        private String routingKey = "test.queue"; 
        private String testQueueName = "test.queue"; 
    
        public ConnectionFactory getConnectionFactory() { 
         SingleConnectionFactory connectionFactory = new SingleConnectionFactory("localhost"); 
         connectionFactory.setUsername("guest"); 
         connectionFactory.setPassword("guest"); 
         return connectionFactory; 
        } 
    
        @Override 
        public RabbitTemplate rabbitTemplate() { 
         RabbitTemplate rabbitTemplate = new RabbitTemplate(getConnectionFactory()); 
         rabbitTemplate.setRoutingKey(routingKey); 
         rabbitTemplate.setQueue(testQueueName); 
         return rabbitTemplate; 
    

    送信の簡単な例:

    import org.springframework.amqp.core.AmqpTemplate; 
    import org.springframework.beans.factory.annotation.Autowired; 
    
    public class MessageSender { 
    
        @Autowired 
        private AmqpTemplate template; 
    
        public void send(String text) { 
         template.convertAndSend(text); 
        } 
    } 
    

    ...そして、受信:ここ

    +0

    ええと...私がOPを正しく理解していれば、これは彼らが以前に見たドキュメンテーションであり、彼らのニーズを満たしていないと判断されました。問題は、少なくとも単数形の読み込みでは、サポートされていないソリューションの1つを使用せずに、 'SingleConnectionFactory'からSQL ServerへのJMS接続に簡単に移行できないということです。 @ bosnicのチームが現在[SQL Server用JDBCドライバ](http://msdn.microsoft.com/en-us/sqlserver/aa937724)を使用していて、それらのニーズを満たすために単純にレトロフィッティングしているかどうかは疑問があります以前の対応)。 – MrGomez

    関連する問題