web-dev-qa-db-ja.com

ミドルウェア&SOA例による

私は経験の浅いJava開発者であり、ミドルウェア/ SOAの基本的な概念とテクノロジーに頭を抱えようとしています。具体的には次のとおりです。

  • サービス指向アーキテクチャー(SOA)
  • メッセージ指向ミドルウェア(MOM)
  • メッセージキュー
  • アパッチキャメル
  • ラバ
  • EJB
  • エンドポイントとルート
  • サービスバス/ ESB
  • JMS

これらのそれぞれをオンライン/ウィキペディアで調べた後、私はこれらのそれぞれについて(ほとんどの場合)まともな定義を得ることができました。私が理解していないのはこれらのテクノロジー/コンセプトのすべてがどのように連携するか第2層/ビジネス層ソリューションを提供するバックエンドです。

誰かがこれらのテクノロジー/コンセプトのすべてを使用するアーキテクチャの例を挙げて、全体のソリューションでそれぞれのroleが何を果たしているかを説明できますか?実際の例を見ると、ほとんどのドットを接続するのに役立つと確信しています。

編集:賞金を追加して以来、私は本を読むことを提案するいくつかの回答を得ました。ここですべてのフィードバックに感謝しますが、本質的に「RTM」に要約される答えに対して300の評判ポイントを使用して手放すことはできません(特に、私がフラットブレークで失敗できない場合affordマニュアル!)繰り返しになりますが、報奨金と決定的な答えは、意味のある実用的な例でこれらのすべての弾丸を攻撃できる人に送られます。 これはミドルウェアの大要である必要はありません!!!これらをすべて組み合わせて使用​​してJavaビジネスを作成する方法を示す1つまたは2つの段落ティアソリューションありがとうございます.

31
IAmYourFaja

SOAの主要原則:各サービスが存在するサービスのセットとしてシステムを構築します

  • 粗目
  • 相互運用可能
  • 疎結合

企業は、長年にわたって開発され、何らかの形でユーザー(人間または他のシステム)に公開された多くのビジネスサービス(粒度の粗い)を提供しています。これらの各機能は、上記の3つの原則を考慮せずに設計および開発された可能性が高くなります。さらに、これらの各機能は、異なるテクノロジーなどを使用して、異種の異種プラットフォームで実行されている可能性があります。

これらの異なる機能を統合して新しいソリューションを作成したい場合はどうなりますか(たとえば、Amazonストアフロントは、カタログサービス、ショッピングカートサービスなどで構成される新しいサービスです)。

次の2つの選択肢があります。

  1. 3つの原則を念頭に置いて、新しい機能をゼロから構築します。しかし、これは非常に費用のかかる作業であり、ほとんど成功することはありません。
  2. 効果的でリスクの少ない代替手段は、既存の実証済みの(十分にテストされた)サービスからそれをアセンブル/構成することです。

オプション2は、ESBsがルーティング、変換、監視などのサポートを支援できる場所ですApache CamelMuleはオープンソースのESBです。エンドポイントとルートは、これらのESBが実装するEIP( Enterprise Integration Patterns )で使用される用語です。 ESBは、MOM'sMessage-Oriented-Middleware )を利用して、実行中のサービスをルーティング/統合することができます異種プラットフォーム(たとえば、カタログサービスはメインフレームシステムで実行されている可能性がありますが、ショッピングカートはステートフルEJBを使用して実装されていますJavaアプリケーションサーバー)メッセージキューはMOMの概念であり、送信者と受信者の間でメッセージを一時的に保存します。ストレージは、非同期配信、保証付き配信などの多くのメリットを提供します。IBM(WebSphere MQ)、オープンソースActiveMQなど、いくつかの異なるMOMベンダーがあります。[〜 #〜] jms [〜#〜]コードをベンダーから独立させる。

すべての概念を例に関連付けようとしました。私もそれを短く保つように努めました。理解を深めるために、フォローアップの質問をしてください。

MOMは、SOAを実装するための要件ではありません。たとえばすべてのサービスがSOAP HTTP経由で公開されている場合、この場合はMOMは必要ありません。

21

すべての技術のJavaクラス/例。あなたが尋ねたのは、進化産業が過去10年間に経験し、まだ進化しているためです。したがって、過去10年間に起こったことは1つの投稿ではカバーできません。ただし、このフェーズをどのように通過したか、なぜ新しいテクノロジスタックが必要なのか、どのような問題が解決されるのかを理解するのは良いことです。

  • EJBs Enterprise Java Beansサーバーサイドコンポーネントアーキテクチャ。

    1)分散(複数のアプリケーションサーバーが互いに通信する場合、サーバーコンポーネント(たとえば、異なるサーバーでホストされている他のサービスを呼び出すサービス)).

    2)トランザクション-持続性Bean(DB TXN)。シンプル/ウェブ/分散アプリケーションの最も重要な部分。構成ベースなどの簡単な開発。トランザクションを処理するXMLを記述します。いつコミットするか、いつロールバックするか(例外について)など。JPA Java Persistance APIはオブジェクト関係マッピングを提供します。テーブルの行がJava = xml設定によるオブジェクト。

    3)安全-認証(uid/pwd)と承認(役割ベース-ユーザーにログインしているユーザーと、ユーザーが実行できるすべてのタスク)。

これは、ある時点でエンタープライズアプリケーションを開発するのに適しているように見えますが、いくつかの欠点があります。その非常に重い(すべてのjarファイルが含まれています)。 Beanとして使用されるクラスは、EJB標準に準拠している必要があります(EJBエンジンが特定のインターフェースを実装して、それがどのタイプのBeanであるかを理解する必要があります)。

そのようなシナリオを克服するために、EJBには業界で利用可能な多くの代替手段があります。たとえば、HibrnateはORマッピング、TXNがEJBの永続性Beanによって提供されるものと同じものを処理します。Spring、軽量フレームワーク、ビジネスロジックを簡素化します(インターフェイスを実装する必要のない既にビルドされたクラスを使用したり、例外をチェックしたり、必須の抽象クラスの一部を拡張したりできます)。

今日では、ほとんどの企業は、Spring、Hibernate、IBatis、Axis-2などの軽量フレームワークを実際に利用しています。

  • サービス指向アーキテクチャー(SOA)サービス指向アーキテクチャーは、エンタープライズレベルでのプラットフォームの独立性に対する答えです。 ORアプリケーションをより速く統合するため、異なるアプリケーションサーバー間で通信するため。

    世界中のホテル予約のオプションを提供するソリューションを実装したいと考えているだけです。あなたの要件は、それらのホテルの部屋の空室状況を確認することです。つまり、一度に複数のホテルアプリケーションを操作する必要があるということです。すべてのホテルが同じ標準を使用している必要はありません。または、そのアプリケーション(サーバー、プログラミング言語)が異なるアプリケーションサーバーに配置されている場合もあります。同時に、すべての異なるタイプのアプリケーションサーバーと通信できる異なるアプリケーションを書くことは実用的ではありません。この問題を解決できる標準ベースのソリューションが必要です。それはWebサービスを通じて可能です。

これは、WebサービスがXMLに基づいてSOAP(Simple Object Access Protocol)でメッセージを送信しているために可能です。 XMLは、あらゆる言語、プラットフォーム、またはネットワークプロトコル間でデータを交換するために使用されます。

Webサービスは分類できますSOAPベースとREST。SOAPベースのサービスJAX-RPCとJAX-WS( http://www.ibm .com/developerworks/webservices/library/ws-tip-jaxwsrpc/index.html

Webサービスを最初に開発することができます-最初にWSDLを記述します。最初にコード-最初にコードを記述します。

それでは、実際にWebサービスを開始する方法について説明しましょう。

最も単純なWebサービスまたはhello world(JAXWS)は次のように記述できます:- http://svn.Apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/Java_first_jaxws/ =

  • メッセージ指向ミドルウェア(MOM)
  • JMS
  • メッセージキュー(ポイントツーポイント)

    MOMは、要求と応答スタイルの通信の欠点を克服する必要があります。クライアントが応答を送信するとき、サーバーは生きている必要があります。クライアントは、サーバーが実行されるまで応答を待ち、応答します。

    要求の応答-サーバーまたはクライアントがダウンしている場合、アプリケーションは失敗します。 MOM-処理のために要求メッセージを送信するときに、エンドポイントのいずれかがオンタイムである必要はありません。

    MOMは概念であり、JMSはこの概念の仕様です。多くのベンダーがこの仕様を実装しています。たとえば、IBMにはMQ、OpenJMSオープンソース実装、EMS Tibcoからなど)があります。

JMS仕様には、主に2つのパターンがあります。パブ/サブとポニンツーポイント。

Pub/subはトピックであり、アプリケーションは特定の情報をすべての関係者に公開する必要があります。例えばダッシュボード。 (ストックアプリケーションは、登録されたすべてのリスナーに特定のメッセージを通知する必要があります)。

Point-to-Point通信はメッセージキューを介して行われます。

ビジネスユースケース-たとえば、カスタマーケアへのカスタマーリクエストなどのアプリケーションがあると考えます。反対側には複数のカスタマーケア担当者がいる場合があり、他の側の顧客はカスタマーケア担当者を超える場合があります。一度に1人の担当者のみがリクエストを処理し、タスクを完了するまで次のリクエストを受け取りません。 (同じ1つのキューに複数のウィンドウがあり、空いているウィンドウが要求を処理します)。たとえば、ノードの1つに障害が発生し、リクエストが処理されず、特定のタイプのリクエストを特定のノードで処理する必要がある場合、他の複雑さについて考えることができます。等.

コードを生成する:- http://docs.Oracle.com/javaee/1.4/tutorial/examples/jms/simple/src/SimpleProducer.Java

コンシューマ同期コード: POJOクラス)---(http://docs.Oracle.com/javaee/1.4/tutorial/examples/jms/simple/src/SimpleSynchConsumer.Java

http://www.Java2s.com/Code/Java/J2EE/ThisexampleisasimpleJMSclientapplication.htm

非同期コードを消費します: 例によって春-プログラムが停止されなくなるまで宛先からメッセージを読み取ります。)---(http://www.springbyexample.org/examples/simple-spring-jms-listener-config.html

ただし、その基本は、このMOMでカバーされる多くの側面があります。フェイルオーバーメカニズムとは何か、セレクターとは何か、永続メッセージ、メッセージ確認モードなど...

  • サービスバス/ ESB
  • エンドポイントとルート
  • アパッチキャメル
  • ラバ

ここで、SOAとMOMを長い間採用していて、企業全体のタスクを実行するために互いに対話するサービスの束があるとします。リダイレクトする必要のある複数の宛先などのロジックを管理すると想像してみてください非常に煩雑になる場所から、このアプリケーションロジックを呼ぶ人もいます。サービスバスは、アプリケーションロジックを削減し、ビジネスロジック(アプリが提供する機能)に重点を置くために使用されます。

簡単に言うと、End pointをサーバーで公開されているURLと見なします。このURL /エンドポイントを使用してサービスを呼び出します。

例えば http:// localhost:8888/Context/MyService?wsdl

コードで:-

    String endpointAddress = "http://localhost:8080/jaxws/services/hello_world?wsdl";

    // Add a port to the Service
    service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);

    HelloWorld hw = service.getPort(HelloWorld.class);
    System.out.println(hw.sayHi("World"));

Routesサービスバスが特定のメッセージを受信すると、キュー/トピックなどのサービス/ブローカーの宛先を経由せずにルーティングします。このパスはルートと呼ばれます。

たとえば、株式アプリケーションにアナリストによる入力があった場合、それはアプリケーション/ Webコンポーネントを通じて処理され、結果は特定の株式更新のために関心のある/登録されたすべてのメンバーに公開されます。

Apache Camel and Muelhttp://camel.Apache.org/how-does-camel-compare-to-mule.html エンタープライズ統合のためのソリューションを提供します。

10
neo

エンタープライズ統合パターン は、すべてがどのように組み合わされるかを理解するのに役立ちます。

[更新:]別の回答についてのフォローアップ質問により、特定の製品について混乱していることがわかりました。これは、実際にはソフトウェアが複数の概念にマッピングされる傾向があることと、実際には提供していないのに、さまざまな企業が「すべて」を提供すると主張していることが原因です。

ESBは、すべてを一緒に接続できるツールキット/ライブラリです。それらはサービス自体でもメッセージング実装でもありませんが、その間の奇妙な小さなギャップを埋めるgooです。すべてを最初から作成している場合は、1つも必要ないかもしれません。なぜなら、それらが得意とするのは、さまざまなテクノロジの山全体の不一致を修正することであり、最初から開始する場合は、その混乱を回避できるからです。

サービスは、まあ、サービスです。 EJBを実装するときにいくつかのEJBを使用する場合があります(何らかの理由でそれらを質問に含めているので、これについてのみ言及します)。

メッセージングミドルウェアは、AからBにメッセージを取得するソフトウェアです。これは非常に便利ですが、複雑でもあり、誰もがその兄弟が独自に開発しました。したがって、ロックインを回避できる抽象化が必要です。 ESBにすることも、すべてJavaの場合はJMSにすることもできます。ただし、JMSを使用するオールJavaの場合でも、Javaコードのすべてのビットのライブラリであるので、ESBを使用することをお勧めします(ルーティングロジックのランダムビット) 、メッセージの再フォーマットなど)。

お役に立てば幸いです。私の最初の答えは、これらのツールを使用して構築する抽象的なパターンについての詳細です-物事を相互に接続すると、同じ問題が何度も何度も発生します。

5
andrew cooke

エンドポイントとルート:情報の発信元と送信先。 Message Queueはエンドポイントの一種です。もう1つのタイプはメッセージトピックです。

エンドポイントは「モノの論理名」です。 PRICE.MSFT。パブリッシャーまたはコンシューマーアプリケーションが物事を取得または送信するために使用します。トピックは、サブスクライブしたすべてのユーザー(1対1または1対多)に情報を配信し、キューは、それを取得した最初のメッセージ(通常は1対1)にメッセージを配信します。キューのことは忘れてください。すべてをトピックで行うこともでき、トピックにはいくつかの利点があります。

メッセージ指向ミドルウェア(MOM):トピック間またはキュー間で情報を配信するソフトウェアインフラストラクチャ。 TCPのように、「パケット指向」ではなく「メッセージ指向」です。そのため、各情報ブロブは、できれば自己記述的なメッセージで配信されます。次に、MOMの実装により、 msg.get( "bid")などを実行できるAPI

JMSおよびAMQPはMOM仕様の例です。 MOM実装は、TIBCO EMS、Websphere MQ、MSMQ、Solace、およびその他の多くの仕様を実装する実際の製品です。

Apache Camel-このMOMの世界でワークフローを構成する方法に関する非常に興味深いアプローチ。しかし、より高度なコンセプト。

サービス指向アーキテクチャー(SOA)、サービスバス/ ESBは、以前はEAI(エンタープライズアプリケーション統合)と呼ばれていたものの単なる新しい流行語です。これらは、「MOM」の使用方法と高額なコンサルタントへの支払い方法に関する推奨事項です。 「ESB」がMOMに追加するのは、パブリッシャーをサービスを提供する「サービス」として考えるという考えです。言い換えれば、ある消費者が今何を望んでいるのかについて、あまり考えすぎないようにしてください。将来5人の消費者がいる可能性があり、その発行者は「消費者Aが望む情報を作成する」のではなく、サービスを提供する必要があります。 (アーキテクチャが5以上のアプリケーションに成長すると、より明確になります)。また、アプリケーション間で物事を簡単にするために、おそらくXMLでいくつかの共通オブジェクトモデルが必要です。

Mule-ESBの1つの形式ですが、その主流ではありません。 5年後には、ほとんどのミドルウェアアクションがAMQPまたは他の何かに完全に移行した可能性があります。

EJB:コンテナで実行される洗練されたJavaクラスのSunのアイデア。アプリケーション開発を容易にするために想定されています。しかし、多くの場合、それは物事をより複雑にしました。より良い代替案は 'Spring'です-しかしEJBは(MOMだけでなく)他のものについてのもので、より大きなアプリケーションを開発する方法についての詳細です(IoCパターンを参照)。

どこから始めるかを検討している場合:JMSについて学習することをお勧めします(他のすべてのMOMは同様であり、JMSはEJB/Muleの基礎です...)。また、非常に高いパフォーマンス要件がない限り、メッセージはXMLを含むTextMessage。その領域ではほとんどのツールが利用できます。または、より単純ですが洗練されていない、キーと値のペアを持つMapMessage。

3
Axel Podehl

すべての要件を取り、それらをクエリにパッケージ化すると、excellentのケーススタディに出会い、ニーズを満たす必要があります。

私は先に進み、Amazonの「この本の中を検索」機能を使用して本を全文検索しました。ここでは、これまでに説明した統合ケースをすべてカバーし、完全であるように見え、設計および実装プロセス全体を順を追って説明します。

これまで読んだことがないmyselfと言って恥ずかしいですが、ニーズに合うかどうか確認するために行ったのと同じツールを使用することを強くお勧めしますコピーに投資する前。完全ではない多くのドキュメンテーションを単に試したり、コンテンツをここの回答にスプールしたりするよりも、より完全で完全であり、役立つようです。

1
MrGomez

さまざまな概念やテクノロジーをさまざまな抽象化レベルで組み合わせます。しかし、すべての概念は(エンタープライズ)アプリケーション統合と関係があります。私はあなたの定義にコメントしようとします:

  • サービス指向アーキテクチャー(SOA)
    SOAは、既存のアプリケーションを疎結合ユニットとして統合するための一連の原則と方法論を提供します。エンタープライズ統合パターン(以下を参照)から:「SOAは統合と分散アプリケーションの境界を曖昧にします」。
  • サービスバス/ ESB
    ESBは、SOA内のアプリケーション内の依存関係を減らすためのSOAの主要な概念です。アプリケーション間の多くの依存関係の代わりに、各アプリケーションはESBに接続されています。
  • メッセージ指向ミドルウェア(MOM)
    MOMは、分散システム間でメッセージを送受信するためのインフラストラクチャです。これは、アプリケーションを統合するために使用されます。 SOA誇大広告が登場する前は、MOMは黄金のハンマーでした。どちらも便利なので、大きな統合スイートはESBとMOMの両方を提供します(またはESB内でMOMを使用します)。
  • メッセージキュー
    メッセージキューは、MOMアーキテクチャの技術的詳細にすぎません。メッセージの送受信が分離されると、メッセージは受信者の準備ができるまでキューに格納されます。
  • アパッチキャメル
    Enterprise Integration Patterns:Designing、Building、and Deploying Messaging Solutions が市場に出たとき、この本のパターンの実装を提供するいくつかのソフトウェアソリューションが作成されました。 Apache Camelもその1つです。 Camelは、オープンソースのESBでもあるApache ServiceMixの一部でもあります。 FuseSourceとTalendは、Apache ServiceMix、Apache Camel、Apache Active MQ(MOM)をパッケージ化して、商用サポートにバンドルしています。
  • ラバ
    Muleは、オープンソースのESBおよび統合プラットフォームでもあります。
  • EJB
    ウィキペディアから:Enterprise JavaBeans(EJB)は、エンタープライズアプリケーションのモジュール構成のための管理されたサーバー側コンポーネントアーキテクチャです。これはEJBを意味しますアプリケーション内のコンポーネントであり、アプリケーションの統合とは主に関係ありません。
  • エンドポイントとルート
    Apache Camelを使用する場合、エンドポイント間のルートを設計します。 チュートリアル を参照してください。つまり、メッセージはエンドポイント経由でシステムに出入りし、ルートで定義されたフローで処理されます。
  • JMS
    JMSまたはJavaメッセージサービスは、標準化されたJava APIを備えたメッセージ指向ミドルウェア(MOM)です。
1
ChrLipp

エンタープライズアプリケーション統合(EAI)は、ビジネスアプリケーションを異種システムに接続するための鍵です。長年にわたって、統合ソリューションのアーキテクトは、さまざまな方法で独自のパターンのブレンドを発明してきました。しかし、これらのアーキテクチャのほとんどは類似点があり、統合パターンの設計で広く受け入れられている一連の標準を開始します。これらの標準のほとんどは、 http://www.eaipatterns.com/toc.html にあるEnterprise Integration Patterns Catalogで説明されています。

WSO2 [〜#〜] esb [〜#〜]

WSO2 Enterprise Service Bus(ESB)4.7.0ドキュメント! WSO2 ESBは、高速、軽量、100%オープンソースであり、Apache Software License v2.0の下で配布されるユーザーフレンドリーなESBです。 WSO2 ESBを使用すると、システム管理者および開発者は、メッセージルーティング、メディエーション、変換、ロギング、タスクスケジューリング、フェイルオーバー、ロードバランシングなどを簡単に設定できます。最も一般的に使用されているエンタープライズ統合パターン(EIP)をサポートし、高度な統合要件のためのトランスポートスイッチング、イベント、ルールベースのメディエーション、および優先度ベースのメディエーションを可能にします。 ESBランタイムは、Apache Synapseメディエーションエンジンに基づいて、完全に非同期、非ブロッキング、およびストリーミングになるように設計されています。