JP6459654B2 - イベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法 - Google Patents

イベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法 Download PDF

Info

Publication number
JP6459654B2
JP6459654B2 JP2015046383A JP2015046383A JP6459654B2 JP 6459654 B2 JP6459654 B2 JP 6459654B2 JP 2015046383 A JP2015046383 A JP 2015046383A JP 2015046383 A JP2015046383 A JP 2015046383A JP 6459654 B2 JP6459654 B2 JP 6459654B2
Authority
JP
Japan
Prior art keywords
queue
event
event message
message
transfer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015046383A
Other languages
English (en)
Other versions
JP2016095824A (ja
Inventor
岳 今井
岳 今井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2016095824A publication Critical patent/JP2016095824A/ja
Application granted granted Critical
Publication of JP6459654B2 publication Critical patent/JP6459654B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Manipulator (AREA)

Description

本発明の実施形態は、イベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法に関する。
会話や仕草などにより、人との間で親和的な対話(インタラクション)を行うロボットが開発されている。このインタラクションロボットの一態様としては、セラピーロボット、エンターテイメントロボットなどが挙げられる。
このインタラクションロボットは、人との対話等のイベントに対してイベントドリブン型の処理で反応を示す、即応性の高いシステムであることが重要である。このイベントドリブン型の処理を行うシステムとしては、ネットワーク分散型のイベントドリブンシステムがある。例えば、インタラクションロボットの場合、イベントを検知するセンサ側のシステムと、検知されたイベントに応じた動作を制御する制御側のシステムとが分散したイベントドリブンシステムがある。このようなネットワーク分散型のイベントドリブンシステムでは、必要な時に必要な機器(システム)と接続して動作できるとともに、処理のリソースを分散できる。
ネットワーク分散型のインベントドリブンシステムでは、互いのシステムがネットワークで接続された際に互いにイベントのメッセージ(以下、「イベントメッセージ」または単に「メッセージ」と呼ぶ)を転送しあう転送モジュールを有することで、システム同士の動作を連携している。このメッセージの送受信には、「メッセージキューイング」と呼ばれる方式が用いられている。
図23は、従来の転送モジュール300を示すブロック図である。図23に示すように、転送モジュール300は、メッセージ受信部301、静的フィルタ部302、キュー格納部304、キュー305、キュー取出部306およびメッセージ送信部307を有する。
メッセージ受信部301は、転送元メッセージを受信し、受信した転送元メッセージを静的フィルタ部302へ出力する。静的フィルタ部302は、静的フィルタ定義303に従って転送元メッセージのフィルタ処理を行い、フィルタ後の転送元メッセージをキュー格納部304に出力する。キュー格納部304は、静的フィルタ部302より出力されたメッセージをキュー305へ格納する。この転送元メッセージをキュー305に格納する処理は、転送元メッセージの受信ごとに順次行われる。
キュー取出部306は、キュー305に格納されたメッセージを取り出し、メッセージ送信部307に出力する。メッセージ送信部307は、キュー取出部306によってキュー305より取り出されたメッセージを所定の転送先に転送先メッセージとして送信する。この転送先メッセージを送信する処理は、システム同士が接続された際に行われる。このように、メッセージキューイングでは、システム間でやり取りされるメッセージをキュー305と呼ばれる記憶領域を介して交換する。
特表2003−532220号公報 特表2007−504529号公報
しかしながら、上記の従来技術では、キューから一律にメッセージが転送されるため、メッセージ転送の効率が悪く、イベントドリブンシステムにおける即時性の要求を十分に満足できないという問題がある。
例えば、インタラクションロボットでは、古くなったイベントに対する反応はイベントの種別によっては不要である場合があり、システム同士が接続した際に古いメッセージが送られると、不自然な応答になる可能性がある。また、古くなったイベントメッセージが数多くキューに格納されると、それらのイベントメッセージを転送する処理に時間がかかり、応答を行うのに時間を要する場合がある。
1つの側面では、メッセージ転送の効率を向上できるイベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法を提供することを目的とする。
第1の案では、イベントドリブンシステムは、第1のキューと、第2のキューと、制御部と、静的フィルタ部とを有する。第1のキューは、転送元からイベントドリブンで転送されたイベントメッセージを保持する。第2のキューは、第1のキューで保持するイベントメッセージの種別毎に設けられ、イベントメッセージを種別毎に保持する。制御部は、第2のキューごとのフィルタ定義をもとに、第2のキューごとにフィルタを適用して、第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定する。そして、制御部は、決定結果に基づいて、第1のキューに保持されるイベントメッセージの保持状態を更新する。静的フィルタ部は、イベントメッセージを第1のキューおよび第2のキューへ格納する際に、当該イベントメッセージのフィルタリングを行う。また、静的フィルタ部は、イベントメッセージの内容をもとに当該イベントメッセージの転送先を決定し、決定した転送先を示す宛先情報を第1のキューおよび第2のキューへ格納する。制御部は、宛先情報に基づいた転送先にイベントメッセージを転送する。
本発明の1実施態様によれば、メッセージ転送の効率を向上することができる。
図1は、第1の実施形態にかかるシステム構成例を説明する説明図である。 図2は、第1の実施形態にかかる転送モジュールの構成例を示すブロック図である。 図3は、第1の実施形態にかかるキューの構成例を説明する説明図である。 図4は、メインキューのみと、種別キューがある場合との比較を説明する説明図である。 図5は、動的フィルタ定義を説明する説明図である。 図6は、メッセージ受信の一例を示すフローチャートである。 図7は、メインキューに対する動的フィルタを適用する処理の一例を示すフローチャートである。 図8は、種別キューに対する動的フィルタを適用する処理の一例を示すフローチャートである。 図9は、動的フィルタの適用の一例を示すフローチャートである。 図10は、メッセージ送信の一例を示すフローチャートである。 図11は、第2の実施形態にかかるシステム構成例を説明する説明図である。 図12は、第3の実施形態にかかるシステム構成例を説明する説明図である。 図13は、第3の実施形態にかかる転送モジュールの構成例を示すブロック図である。 図14は、第3の実施形態にかかるキューの構成例を説明する説明図である。 図15は、メインキューに対する動的フィルタの一例を示すフローチャートである。 図16は、種別キューに対する動的フィルタの一例を示すフローチャートである。 図17は、メッセージ送信の一例を示すフローチャートである。 図18は、第4の実施形態にかかる静的フィルタを適用する処理の一例を示すフローチャートである。 図19は、第5の実施形態にかかるシステム構成例を説明する説明図である。 図20は、第5の実施形態にかかる転送モジュールの構成例を示すブロック図である。 図21は、第6の実施形態にかかる動的フィルタの適用の一例を示すフローチャートである。 図22は、イベントドリブンプログラムを実行するコンピュータの一例について説明するための図である。 図23は、従来の転送モジュールを示すブロック図である。
以下、図面を参照して、実施形態にかかるイベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法を説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明するイベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法は、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
(第1の実施形態)
図1は、第1の実施形態にかかるシステム構成例を説明する説明図である。図1に示すように、ネットワーク分散型のイベントドリブンシステムでは、システム1Aとシステム1Bとが分散している。例えば、インタラクションロボットにネットワーク分散型のイベントドリブンシステムを用いる場合は、イベントを検知するセンサ側をシステム1Aとし、検知されたイベントに応じた動作を制御する制御側をシステム1Bとしてもよい。
システム1A、1Bは、クライアント2、メッセージプロバイダ3および転送モジュール4を有し、JMS(Java(登録商標)メッセージサービス)等を用いてクライアント2間およびシステム1A、1B間のメッセージの送受信を行う。クライアント2は、アプリケーションプログラム等であり、例えば、インタラクションロボットにおけるセンサ検知にかかるプログラム、制御にかかるプログラムなどである。メッセージプロバイダ3は、システム1A、1B内のクライアント2からのメッセージを管理し、他のクライアント2または転送モジュール4へ受け取ったメッセージを出力する。
転送モジュール4は、転送元のメッセージをキューイングし、転送先との接続状態を監視しながら、キューイングしたメッセージを転送するモジュールである。この転送モジュール4におけるメッセージ転送は、JMSなどのpub/sub(出版-購読型)のメッセージ基盤を使用し、非同期で動作してもよい。
例えば、システム1Aの転送モジュール4は、内部のメッセージプロバイダ3が管理するメッセージをキューイングする。そして、転送先であるシステム1Bとの通信接続が開始されたところで、キューイングしたメッセージをシステム1Bのメッセージプロバイダ3へ転送する。逆に、システム1Bの転送モジュール4は、転送先であるシステム1Aとの通信接続が開始されたところで、キューイングしたメッセージをシステム1Aのメッセージプロバイダ3へ転送する。これにより、システム1A、1B間におけるメッセージ転送が実現される。また、JMSのコネクションを長時間ロックしないように、メッセージは一旦テンポラリのキューに格納し、メッセージの受信はテンポラリのキューをポーリングするような実装にしてもよい。
図2は、第1の実施形態にかかる転送モジュール4の構成例を示すブロック図である。図2に示すように、転送モジュール4は、メッセージ受信部10、静的フィルタ部11、キュー格納部12、キュー13、動的フィルタ部14、キュー取出部15およびメッセージ送信部16を有する。
メッセージ受信部10は、メッセージプロバイダ3より転送元のメッセージ(転送元メッセージ)を受信し、受信した転送元メッセージを静的フィルタ部11へ出力する。静的フィルタ部11は、メモリなどに予め設定された静的フィルタ定義111に従い、転送元メッセージのフィルタリングを行って、フィルタリング後の転送元メッセージをキュー格納部12へ出力する。
静的フィルタ部11におけるフィルタリングは、転送元メッセージを選別してキュー13に格納するために行われるものであり、転送元メッセージに対してキュー13への格納時などに一度行われる。また、静的フィルタ定義111における選別の条件は、時間が経過しても変動することのない、静的なものである。
例えば、インタラクションロボットの例では、センサ側で検知されたイベントの中で制御側に通知するイベントは限られている。具体的には、人物の有無などのセンサの検知結果は制御側に通知するイベントである。これに対し、センサの異常を示すステータス情報などは制御側に通知しなくてもよく、センサ側で対処すべきイベントである。静的フィルタ部11では、このような通知の有無にかかる選別を行う。
キュー格納部12は、静的フィルタ部11より出力された転送元メッセージをキュー13へ格納する。キュー13は、転送元メッセージを順次格納するメインキュー131と、転送元メッセージを種別ごとに分けて格納する種別キュー132a、132b、132cとを有する。
キュー格納部12は、転送元メッセージをメインキュー131の最後へ格納するとともに、転送元メッセージのプロパティなどに記述された情報をもとに、メッセージにおけるイベントの種別を判定し、判定した種別ごとに種別キュー132a、132b、132cの最後へ格納する。
イベントの種別には、センサ検出による検出イベント、状態の変化などを示す状態イベント、アクチュエータなどへの指示を示す指示イベント、動作モードの変更などを示すモード変更イベントなど、様々なものがある。
例えば、インタラクションロボットの例では、検出イベントとして、ユーザがタッチセンサに触れた場合、笑顔を検出した場合、ユーザの手振りを検出した場合などがある。また、状態イベントとしては、人がいなくなったことを検出した場合、日中、夜間などの現在の時間帯の変化を検出した場合などがある。また、指示イベントとしては、タッチされて喜ぶ反応を行う反応動作、手振りに対して振り返す反応動作などがある。また、モード変更イベントとしては、人がいなくなったので省エネモードへ移行する場合、現在の時間帯が夜間なのでスリープモードへ移行する場合などがある。
これらのイベントの種別は、メッセージのプロパティなどに種別を示す情報として記述されている。キュー格納部12は、このプロパティなどを参照して、転送元メッセージにおけるイベントの種別に対応した種別キュー132a、132b、132cへメッセージの内容を格納する。
メインキュー131と、種別キュー132a、132b、132cとは、互いに参照可能な双方向のリスト構造を有し、格納されるメッセージ(要素)の参照から削除が容易となっている。
図3は、第1の実施形態にかかるキューの構成例を説明する説明図である。具体的には、図3では、メインキュー131と、種別キュー132aとを例示している。図3に示すように、メインキュー131と、種別キュー132aとには、転送元メッセージが要素MD、要素SDとして格納される。
ここで、要素MDk−1は要素MDより一つ前の要素であり、要素MDk+1は要素MDより次の要素である。同様に、要素SDk−1は要素SDより一つ前の要素であり、要素SDk+1は要素SDより次の要素である。
メインキュー131における各要素(MDk−1、MD、MDk+1…)は、種々の情報を格納するための領域R1、R2、R3、R4を有する。領域R1は、転送元メッセージの内容を格納する。領域R2、R3は前の要素または次の要素への参照ための情報(例えばポインタ)を格納する。領域R4は、対応する種別キュー132aの要素への参照のための情報(例えばポインタ)を格納する。
種別キュー132aにおける各要素(SDk−1、SD、SDk+1…)は、種々の情報を格納するための領域R11、R12、R13、R14を有する。領域R11は、対応するメインキュー131の要素への参照のための情報(例えばポインタ)を格納する。領域R12、R13は前の要素または次の要素への参照ための情報(例えばポインタ)を格納する。領域R4は、メッセージにおけるイベントの種別ごとの情報、すなわち、動的フィルタの実行に必要となる動的フィルタ判断情報を格納する。具体的には、検出イベントにおける検出内容、状態イベントにおける状態の内容、指示イベントにおける指示内容、モード変更イベントにおける変更後の動作モードなどが動的フィルタ判断情報として領域R4に格納される。
メインキュー131と、種別キュー132aとは、図3に示すような互いに参照可能な双方向のリスト構造であることから、メインキュー131に格納されたメッセージのイベントの種別ごとの操作(例えば、参照や削除)を容易に行うことができる。
図4は、メインキュー131のみと、種別キュー132a、132b、132cがある場合との比較を説明する説明図である。ここで、上段のケースC1はメインキュー131のみの場合を、下段のケースC2はメインキュー131の他に種別キュー132a、132b、132cがある場合を例示している。また、メインキュー131に格納されるメッセージは、イベントE1、E2、E3の3種類のイベントであるものとし、それぞれの寿命は期間T11、T12、T13であるものとする。また、イベントE1のメッセージは種別キュー132aに、イベントE2のメッセージは種別キュー132bに、イベントE3のメッセージは種別キュー132cに、それぞれメインキュー131と互いに参照可能に格納される。
図4に示すように、ケースC1では、イベントE1、E2、E3のメッセージを操作しようとする場合は、メインキュー131の要素を全検索しなければならない。例えば、イベントE1、E2、E3のそれぞれの寿命に応じてメッセージを削除する場合には、メインキュー131の要素を全検索して寿命が尽きたメッセージを削除していくこととなる。これに対し、ケースC2では、種別キュー132a、132b、132cのそれぞれに操作を行えばよく、メインキュー131の要素を全検索する必要がない。例えば、イベントE1、E2、E3のそれぞれの寿命に応じてメッセージを削除する場合には、種別キュー132a、132b、132cごとのメッセージの削除と、参照によるメインキュー131のメッセージの削除とを行えばよい。
動的フィルタ部14は、キュー13に格納されたメッセージに対して、メモリなどに予め設定された動的フィルタ定義141を適用したフィルタリングを行う。動的フィルタ定義141における選別の条件は、メッセージの要/不要の判断が時間の経過によって変動するものであり、動的なものである。したがって、動的フィルタ部14におけるフィルタリングは、転送元メッセージをキュー13に格納するタイミング、キュー13に格納された転送元メッセージを送信するタイミング、所定の時間間隔などでキュー13に対して実施される。
具体的には、メインキュー131に対する動的フィルタの場合、動的フィルタ部14は、メインキュー131の最初(古い)のメッセージから順に動的フィルタ定義141を適用し、メッセージを削除するか残すかの選別を行う。フィルタされる場合、動的フィルタ部14は、メインキュー131と、参照される種別キュー132a、132b、132cとから該当のメッセージを削除する。
また、種別キュー132a、132b、132cに対する動的フィルタの場合、動的フィルタ部14は、種別キュー132a、132b、132cの最初(古い)のメッセージから順に動的フィルタ定義141を適用し、メッセージを削除するか残すかの選別を行う。フィルタされる場合、動的フィルタ部14は、種別キュー132a、132b、132cと、参照されるメインキュー131から該当のメッセージを削除する。
また、メッセージの要/不要の判断が時間の経過によって変動する選別の条件は、イベントの種別によって異なる。具体的には、インタラクションロボットの例では、検出イベント、状態イベント、指示イベントまたはモード変更イベントによって異なる。ユーザがタッチセンサに触れたなどの検出イベントや反応動作などの指示イベントは、即座に応答や指示が必要であるが、時間の経過によって必要としなくなる場合がある。また、状態イベントやモード変更イベントなどは、多少の遅れは許容できるが、確実に転送することが望まれる。したがって、動的フィルタ定義141では、例えば、イベントの種別ごとにフィルタが定義されている。
図5は、動的フィルタ定義141を説明する説明図である。図5に示すように、動的フィルタ定義141には、タッチセンサのイベント、人の入退場のイベント、発話指示のイベントなどのイベントごとの定義D1〜D3が記述されている。具体的には、イベントごとの種別キュー132a、132b、132cにおけるキューサイズ、適用するフィルタの種類と、フィルタの条件などが記述されている。このフィルタの種類については、イベントの有効時間(寿命)でフィルタする「有効時間フィルタ」、所定の条件を満たした状態イベントのメッセージを削除する「イベントフィルタ」および所定の転送レートでメッセージを転送するための間引きを行う「転送レートフィルタ」などがある。
例えば、定義D1におけるタッチセンサのイベントについては、キューサイズ「20」とし、有効時間(s)を「3」とする「有効時間フィルタ」と、「転送レートフィルタ」とが定義されている。転送レートフィルタでは、キュー13からメッセージの間引きを開始するタイミングを「5」、間引きで無効にするメッセージの属性を「タッチ」およびキューの最大保持数を「10」とする間引きの条件が定義されている。このため、タッチセンサのイベントについては、3秒だけキュー13に保持され、3秒経過後には動的フィルタ部14によって削除される。また、タッチセンサのイベントについては、転送レートフィルタで定義された条件で動的フィルタ部14によりキュー13からメッセージが間引きされる。
また、定義D2における入退場イベントについては、有効時間を「600」とする「有効時間フィルタ」が定義されている。このため、入退出イベントについては、10分間保持される。
また、定義D3における発話指示イベントについては、キューサイズ「1」とし、人(A)の退出イベントを削除の条件とする「イベントフィルタ」と、有効時間(s)を「60」とする「有効時間フィルタ」とが定義されている。このため、発話指示イベントについては、60秒(1分)間だけキュー13に保持され、1分経過後には動的フィルタ部14によって削除される。また、人(A)が退出した条件を満たす場合も動的フィルタ部14によって削除される。
キュー取出部15は、キュー13に格納されたメッセージを取り出しメッセージ送信部16へ出力する。具体的には、キュー取出部15は、メインキュー131の最初(古い)のメッセージから順に取り出し、メッセージ送信部16へ出力する。メッセージ送信部16は、キュー取出部15より出力されたメッセージをネットワークなどを介して接続された転送先(例えば、システム1Aにおけるシステム1B)へ転送する。キュー取出部15は、転送先へのメッセージの転送に成功したところで、取り出したメインキュー131の要素と、対応する種別キュー132a、132b、132cの要素とを削除する。なお、キュー格納部12によりキュー13へメッセージを格納する処理と、キュー取出部15によりキュー13からメッセージを取り出す処理とは、データの整合性を取るために排他処理で行われる。
次に、転送元メッセージの受信時に行われる処理を説明する。図6は、メッセージ受信の一例を示すフローチャートである。
図6に示すように、処理が開始されると、メッセージ受信部10は、メッセージプロバイダ3からの転送元メッセージの受信を待ち(S1)、メッセージの有無を判定する(S2)。メッセージがない場合(S2:NO)、メッセージ受信部10は、S1へ処理を戻して待機する。
メッセージが有る場合(S2:YES)、メッセージ受信部10はメッセージプロバイダ3から転送元メッセージを受信し(S3)、メッセージを受信した時刻を取得する(S4)。次いで、静的フィルタ部11は、静的フィルタ定義111をもとに、メッセージ受信部10が受信した転送元メッセージの静的フィルタ処理を行って(S5)、選別によりメッセージが有効であるか否かを判定する(S6)。メッセージが有効でない場合(S6:NO)、静的フィルタ部11はS1へ処理を戻す。したがって、転送元メッセージはキュー13に格納されない。
メッセージが有効である場合(S6:YES)、動的フィルタ部14は、有効であると判定されたメッセージのイベント種別をプロパティ等を参照して判断する(S7)。次いで、動的フィルタ部14は、動的フィルタ定義141をもとに、判断されたイベント種別の種別キューに格納されたメッセージに対して動的フィルタを適用する(S8)。次いで、キュー格納部12は、有効であると判定されたメッセージにかかる要素をメインキュー131に追加する(S9)。
次いで、キュー格納部12は、判断されたイベント種別をもとに、メッセージから動的フィルタ判断情報を生成する(S10)。具体的には、検出イベントにおける検出内容、状態イベントにおける状態の内容、指示イベントにおける指示内容、モード変更イベントにおける変更後の動作モードなどが生成される。例えば、検出イベントにおけるタッチセンサイベントでは、タッチセンサの検出結果とともに、有効時間を判定するために、S4で取得した時刻などを含む情報が動的フィルタ判断情報として生成される。
次いで、キュー格納部12は、生成した動的フィルタ判断情報を含む要素をS9で判断された種別に対応する種別キューへ追加する(S11)。次いで、キュー格納部12は、メインキュー131へ追加した要素と種別キューへ追加した要素とが互いに参照できるように、メインキュー131および種別キューの互いの要素にリファレンスを保持させる(S12)。
次いで、動的フィルタ部14は、動的フィルタ定義141を参照し、種別キュー132a、132b、132cにおけるキューサイズ(最大キュー数(maxA))を取得し(S13)、現在の種別キュー132a、132b、132cのキュー数(cntA)を取得する(S14)。次いで、キュー格納部12は、cntA>maxAであるか否かを判定する(S15)。
ここで、現在のキュー数が最大キュー数を超えない場合(S15:NO)、動的フィルタ部14はそのままS1へ処理を戻す。また、現在のキュー数が最大キュー数を超える場合(S15:YES)、動的フィルタ部14は、種別キュー132a、132b、132cにおける最初(古い)の要素を削除し(S16)、この削除した要素と対応するメインキュー131の要素を削除して(S17)、S1へ処理を戻す。これにより、動的フィルタ部14は、種別キュー132a、132b、132cにおけるキューサイズが動的フィルタ定義141に定義されたキューサイズを超えないようにすることができる。
次に、動的フィルタの適用について説明する。図7は、メインキュー131に対する動的フィルタを適用する処理の一例を示すフローチャートであり、例えば、送信時のフローから呼ばれる処理の一例である。
図7に示すように、処理が開始されると、動的フィルタ部14は、メインキュー131の要素を最初(古い)の要素から順に取得し(S20)、要素を取得できたか否かを判定する(S21)。取得できなかった場合(S21:NO)、メインキュー131のすべての要素に対して動的フィルタを適用したことから、動的フィルタ部14は処理を終了する。
取得できた場合(S21:YES)、動的フィルタ部14は、種別キュー132a、132b、132cにおいて対応する要素を参照し、メッセージのイベント種別を判断する(S22)。次いで、動的フィルタ部14は、動的フィルタ定義141を取得し(S23)、対応する種別キュー132a、132b、132cの要素を取得する(S24)。次いで、動的フィルタ部14は、取得した動的フィルタ定義141と、種別キュー132a、132b、132cの要素に含まれる動的フィルタ判断情報とを使って動的フィルタを適用し(S25)、転送が不要な要素であるか否かを選別する(S26)。なお、動的フィルタ定義141と動的フィルタ判断情報とを使った動的フィルタの詳細は後述する。
動的フィルタの適用の結果、転送が不要であると判定された場合(S26:YES)、動的フィルタ部14は、対象の要素について、メインキュー131からの削除と(S27)、種別キュー132a、132b、132cからの削除(S28)とを行い、S20へ処理を戻す。なお、S26において否定の判定である場合(S26:NO)、動的フィルタ部14は、対象の要素について削除することなくそのまま残し、処理を終了する。これにより、転送が必要なもの(例えば、削除されることなく残された要素)が、送信処理によって転送されることとなる。
図8は、種別キュー132a、132b、132cに対する動的フィルタを適用する処理の一例を示すフローチャートである。
図8に示すように、処理が開始されると、動的フィルタ部14は、種別キュー132a、132b、132cの要素を最初(古い)の要素から順に取得し(S30)、要素を取得できたか否かを判定する(S31)。取得できなかった場合(S31:NO)、種別キュー132a、132b、132cのすべての要素に対して動的フィルタを適用したことから、動的フィルタ部14は処理を終了する。
取得できた場合(S31:YES)、動的フィルタ部14は、動的フィルタ定義141を取得し(S32)、取得した動的フィルタ定義141と、種別キュー132a、132b、132cの要素に含まれる動的フィルタ判断情報とを使って動的フィルタを適用する(S33)。この動的フィルタの適用により、動的フィルタ部14は、転送が不要な要素であるか否かを選別する(S34)。
動的フィルタの適用の結果、転送が不要であると判定された場合(S34:YES)、動的フィルタ部14は、対象の要素について、メインキュー131の要素を取得し(S35)、メインキュー131からその要素を削除する(S36)。次いで、動的フィルタ部14は、対象の要素について、種別キュー132a、132b、132cからの削除を行い(S37)、S30へ処理を戻す。なお、なお、S34において否定の判定である場合(S34:NO)、動的フィルタ部14は、対処の要素について削除することなくそのまま残し、S30へ処理を戻す。
次に、動的フィルタ定義141と動的フィルタ判断情報とを使った動的フィルタの適用について説明する。図9は、動的フィルタの適用の一例を示すフローチャートである。
図9に示すように、S25、S33などで処理が開始されると、動的フィルタ部14は、動的フィルタ定義141をもとに、動的フィルタの対象となる要素のイベント種別について定義されているフィルタの内容を判定する(S40)。イベント種別については、上述した「有効時間フィルタ」、「イベントフィルタ」および「転送レートフィルタ」等がある。図9のフローでは、例えば、図5の動的フィルタ定義141を、全ての定義が終了するまで(S56:YES)全て順に処理する。
フィルタの内容が「有効時間フィルタ」である場合、動的フィルタ部14は、要素に含まれる動的フィルタ判断情報を参照し、要素のイベントが動的フィルタ定義141に定義された有効時間を満たすか否かを判定して、メッセージの選別を行う。
具体的には、動的フィルタ部14は、現在時刻(c)を取得し(S41)、動的フィルタ判断情報であるイベントの時刻(t)に、動的フィルタ定義141に定義された有効時間(T)を加えたt+Tについて、c>t+Tであるか否かを判定する(S42)。c>t+Tでない場合(S42:NO)、現在時刻はイベントの有効時間内であることから、動的フィルタ部14は、メッセージを有効と判断(選別)する(S43)。
また、c>t+Tである場合(S42:YES)、現在時刻はイベントの有効時間を過ぎていることから、動的フィルタ部14は、メッセージを無効と判断(選別)する(S44)。メッセージを無効とした場合(S44)は、そのメッセージは転送不要となったことから、他の動的フィルタ定義141の処理を行わずに処理を抜ける(終了する)こととなる。
フィルタの内容が「イベントフィルタ」である場合、動的フィルタ部14は、要素に含まれる動的フィルタ判断情報を参照し、要素のイベントが動的フィルタ定義141に定義された状態イベントであるか否かを判定して、メッセージの選別を行う。
具体的には、動的フィルタ部14は、動的フィルタ定義141に定義された状態イベントの条件を取得し(S45)、要素に含まれる動的フィルタ判断情報が示すイベントの状態が定義された条件を満たすか否かを判定する(S46)。例えば、図5に例示した定義D3であり、要素に含まれるイベントの状態が人の退室である場合は、条件を満たすものと判定される。
条件を満たさない場合(S46:NO)、「イベントフィルタ」でフィルタリングされるメッセージでないことから、動的フィルタ部14は、メッセージを有効と判断(選別)する(S47)。また、条件を満たす場合(S46:YES)、「イベントフィルタ」でフィルタリングされるメッセージであることから、動的フィルタ部14は、メッセージを無効と判断(選別)する(S48)。メッセージを無効とした場合(S48)は、そのメッセージは転送不要となったことから、他の動的フィルタ定義141の処理を行わずに処理を抜ける(終了する)こととなる。
フィルタの内容が「転送レートフィルタ」である場合、動的フィルタ部14は、単位時間あたりにおけるキューの格納速度(Rin)と、キューの取り出し速度(Rout)とを取得する(S49、S50)。このキューの格納速度および取り出し速度は、単位時間あたりにキュー13へ格納されたメッセージの数や、取り出されたメッセージの数を計数することで算出できる。
次いで、動的フィルタ部14は、取得したRin、Routをもとに、動的フィルタ定義141に定義されたメッセージの間引きを発動するための条件を満たすか否かを判定する(S51)。具体的には、図5に例示した定義D4の間引きを開始するタイミング(Th)と、キューの最大保持数(MAXQ)とをもとに、MAXQ/(Rin−Rout)>Th等の発動の条件を満たすか否かを判定する。
発動の条件を満たさない場合(S51:YES)、動的フィルタ部14は、メッセージの間引きをおこなうことなく、メッセージを有効と判断(選別)する(S52)。
発動の条件を満たす場合(S51:NO)、動的フィルタ部14は、動的フィルタ定義141に定義された間引きで無効にするメッセージ属性(YY)に相当するメッセージを、所定の間隔(例えば、1/(Rin−Rout)に1件)で間引きする。具体的には、動的フィルタ部14は、メッセージの属性(y)がYYであり、かつ、T−t>1/(Rin−Rout)であるか否かを判定する(S53)。動的フィルタ部14は、S53において肯定である場合にメッセージを無効と判断(選別)し(S54)、否定である場合にメッセージを有効と判断(選別)する(S55)。メッセージを無効とした場合(S54)は、そのメッセージは転送不要となったことから、他の動的フィルタ定義141の処理を行わずに処理を抜ける(終了する)こととなる。
メッセージを有効とした場合(S43、S47、S52、S55)、動的フィルタ部14は、動的フィルタ定義141の全ての定義についてS40〜S55の処理が終了したか否かを判定する(S56)。全ての定義について終了している場合(S56:YES)、動的フィルタ部14は処理を終了する。S56において未終了である場合(S56:NO)、動的フィルタ部14は、S40へ処理を戻し、未終了である定義についての処理を継続する。
次に、転送元メッセージの送信時に行われる処理を説明する。図10は、メッセージ送信の一例を示すフローチャートである。
図10に示すように、処理が開始されると、転送モジュール4は、一定時間処理を待機する(S60)。次いで、動的フィルタ部14は、動的フィルタ定義141に対して動的フィルタを適用する(S61)。この動的フィルタの適用は、一定時間ごとであってもよいし、転送先にメッセージを送信する際(S66)に行ってもよい。
次いで、キュー取出部15は、メインキュー131の要素を最初(古い)の要素から順に取得し(S62)、取得できたか否かを判定する(S63)。取得できなかった場合(S63:NO)は、転送するメッセージがないことから、キュー取出部15はS60へ処理を戻す。
取得できた場合(S63:YES)、メッセージ送信部16は、転送先との接続確認を行い(S64)、接続中であるか否かを判定する(S65)。接続中でない場合(S65:NO)、転送先との接続がないことから、メッセージ送信部16はS60へ処理を戻す。
接続中である場合(S65:YES)、メッセージ送信部16は、キュー取出部15がメインキュー131より取得したメッセージを送信し(S66)、受領通知などを確認することで送信が成功したか否かを判定する(S67)。送信が失敗した場合(S67:NO)、メッセージが転送先に送れなかったことから、メッセージ送信部16はS60へ処理を戻す。
送信が成功した場合(S67:YES)、メッセージが転送先に送れたことから、キュー取出部15は、送信したメッセージに対応する種別キュー132a、132b、132cの要素を取得する(S68)。次いで、キュー取出部15は、送信したメッセージの要素を、メインキュー131および種別キュー132a、132b、132cから削除し(S69、S70)、S61へ処理を戻す。
このように、動的フィルタ部14は、動的フィルタ定義141による種別キュー132a、132b、132cごとのフィルタ定義をもとに、種別キュー132a、132b、132cごとにフィルタを適用して、種別キュー132a、132b、132cに保持されるメッセージを削除するか、残して転送先へ転送するかを決定する。そして、動的フィルタ部14は、動的フィルタ定義141による決定結果に基づいて、メインキュー131に保持されるメッセージの保持状態を更新する。このため、キュー13には、時間の経過とともに、転送に必要なメッセージが残されることとなる。したがって、システム1A、1Bにおけるイベントドリブンシステムでは、キュー13によるメッセージ転送の効率をよくすることができる。
(第2の実施形態)
図11は、第2の実施形態にかかるシステム構成例を説明する説明図である。図11に示すように、システム1Cが転送する転送先がシステム1A、1Bであり、それぞれの転送ルール(例えば、通信プロトコル)が異なる場合は、それぞれの転送ルールに対応した転送モジュール4A、4Bを有するように構成してもよい。
この第2の実施形態では、転送モジュール4A、4Bについては、メッセージ送信部16が転送先にメッセージを送る際の転送ルールを変更するだけでよく、他の構成は第1の実施形態と同様の構成とすることができる。ただし、転送モジュール4A、4Bにおいて処理が重複する場合には、その分のリソースを用意する必要がある。
(第3の実施形態)
図12は、第3の実施形態にかかるシステム構成例を説明する説明図である。図12に示すように、第3の実施形態にかかるシステム1Dは、共通の転送モジュール4Dによりシステム1A、1B、1Cへの転送を行う点が第2の実施形態とは異なる。
図13は、第3の実施形態にかかる転送モジュール4Dの構成例を示すブロック図である。図13に示すように、転送モジュール4Dは、転送先ごとの転送スレッド17A、17Bを用意している。これにより、転送ルールの異なる複数のシステムへ転送する場合であっても、メッセージ受信部10、静的フィルタ部11、キュー格納部12、キュー13および動的フィルタ部14を共通化できる。
図14は、第3の実施形態にかかるキュー13の構成例を説明する説明図である。図14に示すように、メインキュー131の要素は、転送先毎の転送済みフラグを格納する領域R5を有する。この転送済みフラグは、転送先ごとの転送の有無を示すフラグである。転送スレッド17A、17Bは、領域R5を参照することで、全てのスレッドで転送が完了したか否かを判定することができる。
ここで、第3の実施形態における動的フィルタの適用について説明する。図15は、メインキュー131に対する動的フィルタの一例を示すフローチャートである。
図15に示すように、処理が開始されると、動的フィルタ部14は、メインキュー131のチェック済みの位置の次の要素を順次取得し(S101)、要素を取得できたか否かを判定する(S102)。取得できなかった場合(S102:NO)、メインキュー131のすべての要素に対して動的フィルタを適用したことから、動的フィルタ部14は処理を終了する。なお、メインキュー131のチェック済み位置は、メインキュー141のフィルタと共通の値であり、転送スレッド単位で管理する変数等である。このように、メインキュー131のチェック済み位置は、転送スレッドごとに管理されており、S101、S102でチェックした場合に更新される。これにより、次にメインキュー131へ動的フィルタを適用する場合は、更新後のチェック済み位置から開始される。
取得できた場合(S102:YES)、動的フィルタ部14は、取得した要素の転送済みフラグが「true」であるか否かを判定する(S103)。「true」である場合(S103:YES)は、取得した要素については既に処理済み(転送済みまたはフィルタ済み)である。したがって、この場合は動的フィルタを適用することなく、動的フィルタ部14はS110へ処理を進める。
「true」でない場合(S103:NO)、動的フィルタ部14は、前述したS22〜S26と同様に動的フィルタを適用する処理を行う(S104〜S108)。
次いで、動的フィルタの適用の結果、転送が不要であると判定された場合(S108:YES)、動的フィルタ部14は、自身の転送済みフラグを「true」に設定し(S109)、転送済みフラグを参照して全てのスレッドが要素を転送済みであるか否かを判定する(S110)。
全てのスレッドが要素を転送済みである場合(S110:YES)、動的フィルタ部14は、対象の要素について、種別キュー132a、132b、132cの要素を削除し(S111)、メインキュー131からの削除を行って(S112)、S101へ処理を戻す。なお、S108において否定の判定であり(S108:NO)、転送すべきメッセージを見つけた時点で、動的フィルタ部14は処理を終了する。
図16は、種別キュー132a、132b、132cに対する動的フィルタの一例を示すフローチャートである。
図16に示すように、処理が開始されると、動的フィルタ部14は、種別キュー132a、132b、132cの要素を最初(古い)の要素から順に取得し(S120)、要素を取得できたか否かを判定する(S121)。取得できなかった場合(S121:NO)、種別キュー132a、132b、132cのすべての要素に対して動的フィルタを適用したことから、動的フィルタ部14は処理を終了する。
取得できた場合(S121:YES)、動的フィルタ部14は、対応するメインキュー131の要素を取得し(S122)、取得した要素の転送済みフラグが「true」であるか否かを判定する(S123)。「true」である場合(S123:YES)は、いずれかの転送先へ転送済みであり、フィルタすることで転送先ごとのメッセージに整合性が取れなくなる。したがって、この場合は動的フィルタを適用することなく、動的フィルタ部14はS128へ処理を進める。
「true」でない場合(S123:NO)、動的フィルタ部14は、前述したS32〜S34と同様に動的フィルタを適用する処理を行う(S124〜S126)。
次いで、動的フィルタの適用の結果、転送が不要であると判定された場合(S126:YES)、動的フィルタ部14は、自身の転送済みフラグを「true」に設定し(S127)、転送済みフラグを参照して全てのスレッドが要素を転送済みであるか否かを判定する(S128)。
全てのスレッドが要素を転送済みである場合(S128:YES)、動的フィルタ部14は、対象の要素について、種別キュー132a、132b、132cの要素を削除する(S129)。次いで、動的フィルタ部14は、メインキュー131からの削除を行って(S130)、処理対象を次の要素とするようにS120へ処理を戻す。
次に、第3の実施形態において、転送元メッセージの送信時に行われる処理を説明する。図17は、メッセージ送信の一例を示すフローチャートである。
図17に示すように、処理が開始されると、転送モジュール4は、一定時間処理を待機する(S140)。次いで、動的フィルタ部14は、動的フィルタ定義141に対して動的フィルタを適用する(S141)。この動的フィルタの適用は、一定時間ごとであってもよいし、転送先にメッセージを送信する際(S146)に行ってもよい。
次いで、キュー取出部15は、メインキュー131のチェック済み位置の次の要素を取得し(S142)、取得できたか否かを判定する(S143)。取得できなかった場合(S143:NO)は、転送するメッセージがないことから、キュー取出部15はS140へ処理を戻す。なお、メインキュー131のチェック済み位置は、メインキュー141のフィルタと共通の値であり、転送スレッド単位で管理する変数等である。このように、メインキュー131のチェック済み位置が転送スレッドごとに管理されていることから、転送ルールの異なる複数のシステムへ転送する場合の処理を効率的の行うことができる。
取得できた場合(S143:YES)、メッセージ送信部16は、転送先との接続確認を行い(S144)、接続中であるか否かを判定する(S145)。接続中でない場合(S145:NO)、転送先との接続がないことから、メッセージ送信部16はS140へ処理を戻す。
接続中である場合(S145:YES)、メッセージ送信部16は、キュー取出部15がメインキュー131より取得したメッセージを送信し(S146)、受領通知などを確認することで送信が成功したか否かを判定する(S147)。送信が失敗した場合(S147:NO)、メッセージが転送先に送れなかったことから、メッセージ送信部16はS140へ処理を戻す。
送信が成功した場合(S147:YES)、メッセージが転送先に送れたことから、キュー取出部15は、送信したメッセージに対応するメインキュー131の要素の転送済みフラグを「true」に設定し(S148)、S141へ処理を戻す。
以上のように、第3の実施形態では、スレッドが別となることから、自身のスレッドで転送したとしても、全てのスレッドで転送が完了するまでは、キュー13に格納されたメッセージを削除できない。したがって、転送スレッド17A、17Bにおいて転送が完了した後の、動的フィルタ部14の適用により、キュー13に格納されたメッセージを削除してもよい。
(第4の実施形態)
第4の実施形態では、第3の実施形態と同様に、共通の転送モジュール4Dによりシステム1A、1B、1Cへメッセージを転送するが(図12参照)、その転送先(宛先)がメッセージによって異なる。
転送モジュール4Dが転送するメッセージは、転送先が不定であり、転送するメッセージもメッセージによって転送先が異なるようなユースケースがある。この場合、メッセージの内容に転送先が示されている。例えば、メッセージのヘッダ等にメッセージのメタ情報に転送先を判断する情報が書かれている。一例として、送信先のユーザ名、トピック名、グループ名がメタ情報に含まれており、これらの情報をもとに、実際の転送先を決定することができる。
この転送先の決定は、静的フィルタ部11(図13参照)で行う。そして、キュー格納部12は、メインキュー131および種別キュー132a、132b、132cへメッセージを格納する際に、決定された転送先を示す宛先情報を付与する。この宛先情報の付与は、例えば、転送先毎の転送済みフラグを格納する領域R5(図14参照)において、フラグとともに宛先情報を格納してもよい。
図18は、第4の実施形態にかかる静的フィルタを適用する処理の一例を示すフローチャートである。図18に示すように、静的フィルタ部11は、静的フィルタの定義情報に記述されたフィルタリングの定義に従って、静的フィルタの適用を開始する。この時、所定のタイミング、例えば、各メッセージにおける前の静的フィルタ(S150)および次の静的フィルタ(S154)の合間において、メッセージの転送先を決定して宛先情報を書き込む処理(S151〜S153)を行う。なお、S151〜S153が行われるタイミングは、全ての静的フィルタを行う前または行った後などであってもよく、図示例に限定しない。
具体的には、静的フィルタ部11は、メッセージのメタ情報を解釈する(S151)。これにより、メタ情報に含まれるユーザ名、トピック名、グループ名などの、メッセージの宛先となる情報が取得される。
次いで、静的フィルタ部11は、メタ情報の解釈をもとに宛先(ユーザ名、トピック名、グループ名に対応する宛先)一覧を決定する(S152)。この宛先一覧は、単数または複数の宛先でよい。例えば、特定のユーザ名に対応する1人のユーザを宛先とする宛先一覧としてもよい。また、グループ名に対応するグループにおいて所属する複数のユーザを宛先とする宛先一覧としてもよい。
次いで、キュー格納部12は、メインキュー131および種別キュー132a、132b、132cに格納するメッセージを包含するデータ構造(例えば、領域R5)に決定された宛先一覧(宛先リスト)を書き込む(S153)。
キュー取出部15は、メッセージとともに領域R5に格納された宛先情報を取り出してメッセージ送信部16へ出力する。メッセージ送信部16は、全ての転送先のリストに対する転送済みフラグを管理する代わりに、該当する宛先に対してのみ送信済みフラグを管理するようする事により、メッセージ毎に異なる転送先への転送を実現する。
(第5の実施形態)
図19は、第5の実施形態にかかるシステム構成例を説明する説明図である。図19に示すように、システム1E間においては、例えば、転送先または転送元のクライアント2の要求(新たに通知したいイベントの種別が発生した場合等)によって、メッセージの転送ポリシーを動的に変更する場合がある。
例えば、転送ポリシーを変更する場合としては、転送先のクライアント2やシステム1Eの都合で転送元の特定の情報が必要となる場合がある。また、転送元のクライアント2やシステム1Eの都合で、転送先のシステム1Eに所定の情報を伝える場合がある。この転送ポリシーは、静的フィルタまたは動的フィルタの定義として示される。
システム1Eの転送モジュール4Eは、動的に転送ポリシー(静的フィルタまたは動的フィルタの定義)を変更する。具体的には、転送モジュール4Eは、静的フィルタまたは動的フィルタの定義を、別のシステムやシステム1E内のクライアント2の要求に応じて、追加/削除を可能としている。
図20は、第5の実施形態にかかる転送モジュール4Eの構成例を示すブロック図である。図20に示すように、転送モジュール4Eは、転送ポリシー管理部18と、記憶部19とを有している。
記憶部19は、静的フィルタ定義111および動的フィルタ定義141を記憶する。転送ポリシー管理部18は、別のシステムやシステム1E内のクライアント2からの、静的・動的フィルタの追加/削除等の要求を元に、記憶部19に記憶された静的フィルタ定義111および動的フィルタ定義141を更新する。具体的には、別のシステムやシステム1E内のクライアント2から通知された新たな定義を、静的フィルタ定義111および動的フィルタ定義141に反映する。
静的フィルタ部11および動的フィルタ部14は、更新された静的フィルタ定義111および動的フィルタ定義141に従ったフィルタ処理を行う。このため、システム1Eでは、動的に変更される転送ポリシーに応じたメッセージの転送を実現できる。
(第6の実施形態)
第6の実施形態では、イベントメッセージにおける一部のデータ領域にフィルタリングを行うことで、転送先の接続が不安定な場合等、送信が滞る場合にデータの転送量を適正化する。
例えば、転送モジュール4Dによりシステム1A、1B、1Cへメッセージを転送する場合など(図12参照)、転送先が不定の場合は、転送先ごとに通信速度や接続の安定度が異なることがある。この時、転送先によってはイベントメッセージの転送が滞ってしまう場合がある。一例として、画像を転送する場合等、イベントメッセージが大きなデータを含む場合は、転送が滞る可能性が高くなる。
しかしながら、画像を含むイベントメッセージの種別として一律にフィルタリングを行うと、イベントメッセージに含まれる画像以外の情報もフィルタリングされてしまう。例えば、画像と、画像処理の結果などの負荷情報とがイベントメッセージとして転送される場合には、転送が滞らないように画像をフィルタし、負荷情報を転送したいケースがある。
第6の実施形態では、動的フィルタ定義141において、イベントメッセージで画像等が格納される所定のデータ領域の有効時間(T2)を定義する。そして、動的フィルタ部14は、有効時間(T2)をもとに、キュー13に保持されるイベントメッセージの所定のデータ領域を削除するか否かを決定して、データのフィルタリングを行う。
図21は、第6の実施形態にかかる動的フィルタの適用の一例を示すフローチャートである。図21に示すように、動的フィルタ部14は、現在時刻(c)を取得し(S41)、動的フィルタ判断情報であるイベントの時刻(t)に、動的フィルタ定義141に定義された有効時間(T1)を加えたt+T1について、c>t+Tであるか否かを判定する(S42)。c>t+T1でない場合(S42:NO)、現在時刻はイベントの有効時間内であることから、動的フィルタ部14は、イベントの時刻(t)に所定のデータ領域の有効時間(T2)を加えたt+T2について、c>t+T2であるか否かを判定する(S43a)。
c>t+T2である場合(S43a:YES)、現在時刻は所定のデータ領域の有効時間を過ぎていることから、動的フィルタ部14は、該当するデータ領域の削除、すなわちイベントメッセージにおけるデータの部分削除を行う(S43b)。また、c>t+T2でない場合(S43a:NO)、動的フィルタ部14は、メッセージは有効と判断(選別)する(S43c)。
また、c>t+T1である場合(S42:YES)、現在時刻はイベントの有効時間を過ぎていることから、動的フィルタ部14は、メッセージを無効と判断(選別)する(S44)。メッセージを無効とした場合(S44)は、そのメッセージは転送不要となったことから、他の動的フィルタ定義141の処理を行わずに処理を抜ける(終了する)こととなる。
第6の実施形態では、上述した動的フィルタの適用により、例えば、通信が遅い転送先に対して大きなデータを送ろうとし続けて転送が滞るような現象を、大きなデータが格納されるデータ領域を削除することで回避できる。また、イベントメッセージに含まれる必要な情報を、適切な時間で転送することが可能となる。
また、上記の実施形態では、キュー13は、メインキュー131と、種別キュー132a、132b、132cとを有する構成としたが、メインキュー131がなく、種別キュー132a、132b、132cとする構成であってもよい。この構成では、転送スレッド17A、17Bが種別キュー132a、132b、132cごとの最後のイベントメッセージの時刻を見て、どのイベントメッセージを送るかを決定すればよい。この場合、キュー13にメインキュー131を用意することなく、キュー13に格納されたイベントメッセージを順番どおりに転送できるが、メインキュー131を参照して順番どおりに転送する場合と比較すると、処理効率が落ちることとなる。
また、上記の実施形態では、1つの転送先に1つの転送スレッドの場合を例示しているが、転送先が不定の場合には、転送先が多数になることがある。このように、転送先が不定である場合は、転送先ごとに転送スレッドを用意するのは効率的ではない。したがって、転送モジュール4D、4Eは、予め一定数の転送スレッドを動作させ(スレッドプール)、スレッドプール内の転送スレッドの中から転送先を選択して処理するようにしてもよい。
また、上記の実施形態では、センサ側のシステムと制御側のシステムとが分散したインタラクションロボットを例示して説明したが、これに限定されない。例えば、パーソナルコンピュータ(PC:Personal Computer)を始めとする固定端末や、携帯電話機、PHS(Personal Handyphone System)やPDA(Personal Digital Assistant)などの移動体端末による情報処理装置において実現してもよい。
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、システム1A、1B、1C、1D、1Eの各処理部が適宜統合されてもよい。また、各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、上記の実施形態で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図22を用いて、上記の実施形態と同様の機能を有するイベントドリブンプログラムを実行するコンピュータの一例について説明する。
図22は、イベントドリブンプログラム270aを実行するコンピュータ200の一例について説明するための図である。図22に示すように、コンピュータ200は、操作部210aと、スピーカ210bと、カメラ210cと、マイク210d、ディスプレイ220と、通信部230とを有する。さらに、このコンピュータ200は、CPU250と、ROM260と、HDD270と、RAM280と有する。これら210〜280の各部はバス240を介して接続される。
HDD270には、システム1A、1B、1C、1D、1Eの各処理部と同様の機能を発揮するイベントドリブンプログラム270aが予め記憶される。このイベントドリブンプログラム270aについては、上述した実施形態で示した各構成要素と同様、適宜統合又は分離してもよい。すなわち、HDD270に格納される各データは、常に全てのデータがHDD270に格納される必要はなく、処理に必要なデータのみがHDD270に格納されればよい。
そして、CPU250が、イベントドリブンプログラム270aをHDD270から読み出してRAM280に展開する。これによって、イベントドリブンプログラム270aは、イベントドリブンプロセス280aとして機能する。このイベントドリブンプロセス280aは、HDD270から読み出した各種データを適宜RAM280上の自身に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。なお、イベントドリブンプロセス280aは、システム1A、1B、1C、1Dの各処理部にて実行される処理を含む。また、CPU250上で仮想的に実現される各処理部は、常に全ての処理部がCPU250上で動作する必要はなく、処理に必要な処理部のみが仮想的に実現されればよい。
なお、上記のイベントドリブンプログラム270aについては、必ずしも最初からHDD270やROM260に記憶させておく必要はない。例えば、コンピュータ200に挿入されるフレキシブルディスク、いわゆるFD、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。そして、コンピュータ200がこれらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、LAN、WANなどを介してコンピュータ200に接続される他のコンピュータまたはサーバ装置などに各プログラムを記憶させておき、コンピュータ200がこれらから各プログラムを取得して実行するようにしてもよい。
1A、1B、1C、1D、1E…システム
2…クライアント
3…メッセージプロバイダ
4、4A、4B、4D、4E…転送モジュール
10…メッセージ受信部
11…静的フィルタ部
12…キュー格納部
13…キュー
14…動的フィルタ部
15…キュー取出部
16…メッセージ送信部
17A、17B…転送スレッド
18…転送ポリシー管理部
19…記憶部
111…静的フィルタ定義
131…メインキュー
132a、132b、132c…種別キュー
141…動的フィルタ定義
200…コンピュータ
D1〜D4…定義
E1〜E3…イベント
R1〜R5、R11〜R14…領域
T11、T12、T13…期間

Claims (10)

  1. 転送元からイベントドリブンで転送されたイベントメッセージを保持する第1のキューと、
    前記第1のキューで保持するイベントメッセージの種別毎に設けられ、前記イベントメッセージを種別毎に保持する第2のキューと、
    前記第2のキューごとのフィルタ定義をもとに、前記第2のキューごとにフィルタを適用して、前記第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定し、当該決定結果に基づいて、前記第1のキューに保持されるイベントメッセージの保持状態を更新する制御部と
    前記イベントメッセージを前記第1のキューおよび前記第2のキューへ格納する際に、当該イベントメッセージのフィルタリングを行う静的フィルタ部と、を有し、
    前記静的フィルタ部は、前記イベントメッセージの内容をもとに当該イベントメッセージの転送先を決定し、決定した転送先を示す宛先情報を前記第1のキューおよび前記第2のキューへ格納し、
    前記制御部は、前記宛先情報に基づいた転送先に前記イベントメッセージを転送する
    ことを特徴とするイベントドリブンシステム。
  2. 前記制御部は、前記転送元からイベントメッセージが転送された場合および前記転送先へイベントメッセージを転送する場合の少なくとも一方で、前記第1のキューに保持されるイベントメッセージの保持状態を更新する
    ことを特徴とする請求項1に記載のイベントドリブンシステム。
  3. 前記フィルタ定義は、前記第2のキューごとのイベントメッセージの有効時間を定義し、
    前記制御部は、前記第2のキューごとに定義された有効時間をもとに、前記第2のキューに保持されるイベントメッセージが前記定義された有効時間を満たすように、前記第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定する
    ことを特徴とする請求項1又は2に記載のイベントドリブンシステム。
  4. 前記フィルタ定義は、前記第2のキューごとのキューサイズを定義し、
    前記制御部は、前記第2のキューごとに定義されたキューサイズをもとに、前記第2のキューに保持されるイベントメッセージの数が前記定義されたキューサイズを満たすように、前記第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定する
    ことを特徴とする請求項1乃至3のいずれか一項に記載のイベントドリブンシステム。
  5. 前記フィルタ定義は、所定の状態を示す状態イベントの削除を定義し、
    前記制御部は、前記第2のキューに保持されるイベントメッセージについて、前記状態イベントを満たすイベントを削除するように、前記第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定する
    ことを特徴とする請求項1乃至4のいずれか一項に記載のイベントドリブンシステム。
  6. 前記フィルタ定義および前記静的フィルタ部のフィルタリングにかかる定義を記憶する記憶部と、
    外部からの要求に応じて前記記憶部が記憶する定義の内容を更新する管理部とを有する
    ことを特徴とする請求項1乃至5のいずれか一項に記載のイベントドリブンシステム。
  7. 前記フィルタ定義は、前記第2のキューごとのイベントメッセージに含まれる所定のデータ領域の有効時間を定義し、
    前記制御部は、前記所定のデータ領域の有効時間をもとに、前記第2のキューに保持されるイベントメッセージに含まれる所定のデータ領域を削除するか否かを決定する
    ことを特徴とする請求項1乃至のいずれか一項に記載のイベントドリブンシステム。
  8. 転送元からイベントドリブンで転送されたイベントメッセージを保持する第1のキューと、
    前記第1のキューで保持するイベントメッセージの種別毎に設けられ、前記イベントメッセージを種別毎に保持する第2のキューと、
    前記第2のキューごとのフィルタ定義をもとに、前記第2のキューごとにフィルタを適用して、前記第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定し、当該決定結果に基づいて、前記第1のキューに保持されるイベントメッセージの保持状態を更新する制御部と
    前記イベントメッセージを前記第1のキューおよび前記第2のキューへ格納する際に、当該イベントメッセージのフィルタリングを行う静的フィルタ部と、を有し、
    前記静的フィルタ部は、前記イベントメッセージの内容をもとに当該イベントメッセージの転送先を決定し、決定した転送先を示す宛先情報を前記第1のキューおよび前記第2のキューへ格納し、
    前記制御部は、前記宛先情報に基づいた転送先に前記イベントメッセージを転送する
    ことを特徴とする情報処理装置。
  9. コンピュータに、
    転送元からイベントドリブンで転送されたイベントメッセージを第1のキューに保持し、
    前記第1のキューで保持するイベントメッセージの種別毎に設けられた第2のキューに、前記イベントメッセージを種別毎に保持し、
    前記第2のキューごとのフィルタ定義をもとに、前記第2のキューごとにフィルタを適用して、前記第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定し、当該決定結果に基づいて、前記第1のキューに保持されるイベントメッセージの保持状態を更新し、
    前記イベントメッセージを前記第1のキューおよび前記第2のキューへ格納する際に、当該イベントメッセージのフィルタリングを行う処理を実行させ、
    前記フィルタリングを行う処理は、前記イベントメッセージの内容をもとに当該イベントメッセージの転送先を決定し、決定した転送先を示す宛先情報を前記第1のキューおよび前記第2のキューへ格納し、
    前記更新する処理は、前記宛先情報に基づいた転送先に前記イベントメッセージを転送する
    ことを特徴とするイベントドリブンプログラム。
  10. コンピュータが、
    転送元からイベントドリブンで転送されたイベントメッセージを第1のキューに保持し、
    前記第1のキューで保持するイベントメッセージの種別毎に設けられた第2のキューに、前記イベントメッセージを種別毎に保持し、
    前記第2のキューごとのフィルタ定義をもとに、前記第2のキューごとにフィルタを適用して、前記第2のキューに保持されるイベントメッセージを転送先へ転送するか、削除するかを決定し、当該決定結果に基づいて、前記第1のキューに保持されるイベントメッセージの保持状態を更新し、
    前記イベントメッセージを前記第1のキューおよび前記第2のキューへ格納する際に、当該イベントメッセージのフィルタリングを行う処理を実行し、
    前記フィルタリングを行う処理は、前記イベントメッセージの内容をもとに当該イベントメッセージの転送先を決定し、決定した転送先を示す宛先情報を前記第1のキューおよび前記第2のキューへ格納し、
    前記更新する処理は、前記宛先情報に基づいた転送先に前記イベントメッセージを転送する
    ことを特徴とするイベントドリブン方法。
JP2015046383A 2014-11-07 2015-03-09 イベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法 Active JP6459654B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2014227445 2014-11-07
JP2014227445 2014-11-07

Publications (2)

Publication Number Publication Date
JP2016095824A JP2016095824A (ja) 2016-05-26
JP6459654B2 true JP6459654B2 (ja) 2019-01-30

Family

ID=56070393

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015046383A Active JP6459654B2 (ja) 2014-11-07 2015-03-09 イベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法

Country Status (1)

Country Link
JP (1) JP6459654B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111538600B (zh) * 2020-02-25 2023-09-12 远景智能国际私人投资有限公司 消息处理方法、装置、计算机设备及存储介质
CN113806110B (zh) * 2021-09-18 2024-03-22 平安银行股份有限公司 基于事件驱动的消息处理方法、装置、设备及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0470952A (ja) * 1990-07-04 1992-03-05 Fuji Electric Co Ltd データ転送におけるバッファ管理方式
JP3803707B2 (ja) * 2000-12-28 2006-08-02 フューチャーシステムコンサルティング株式会社 フレームワークシステム
JP3944231B2 (ja) * 2000-12-28 2007-07-11 フューチャーアーキテクト株式会社 フレームワークシステム
US8117595B2 (en) * 2004-03-23 2012-02-14 Microsoft Corporation Method for updating data in accordance with rights management policy
JP4771431B2 (ja) * 2007-09-20 2011-09-14 Kddi株式会社 オペレーティングシステムに基づくイベント処理機能搭載装置及びプログラム
JP4729611B2 (ja) * 2008-10-30 2011-07-20 株式会社エヌ・ティ・ティ・ドコモ イベントキュー管理装置及びイベントキュー管理方法
JP5667097B2 (ja) * 2012-01-24 2015-02-12 日本電信電話株式会社 通信装置、通信方法、及び通信プログラム
JP5966690B2 (ja) * 2012-07-04 2016-08-10 富士通株式会社 サーバ装置、フィルタリング方法、およびフィルタリングプログラム
JP5937539B2 (ja) * 2013-04-12 2016-06-22 富士通フロンテック株式会社 流量制御装置、通信制御システム、流量制御方法及びプログラム

Also Published As

Publication number Publication date
JP2016095824A (ja) 2016-05-26

Similar Documents

Publication Publication Date Title
US7793140B2 (en) Method and system for handling failover in a distributed environment that uses session affinity
JP5686034B2 (ja) クラスタシステム、同期制御方法、サーバ装置および同期制御プログラム
JP6602866B2 (ja) 並列持続性を有するメッセージブローカシステム
US9946582B2 (en) Distributed processing device and distributed processing system
CN106506490B (zh) 一种分布式计算控制方法以及分布式计算系统
CN111104069B (zh) 分布式存储系统的多区域数据处理方法、装置及电子设备
CN103207867A (zh) 处理数据块的方法、发起恢复操作的方法和节点
WO2020238989A1 (zh) 一种调度任务处理实体的方法及装置
WO2019144809A1 (zh) 一种服务更新方法及装置、系统
JP5395517B2 (ja) 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム
WO2017072938A1 (ja) 計算機のスケールアウト方法、計算機システム及び記憶媒体
CN111913793A (zh) 分布式任务调度方法、装置、节点设备和系统
WO2023071999A1 (zh) 一种用户匹配方法、装置、设备及存储介质
JP6459654B2 (ja) イベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法
US10652081B1 (en) Facilitating resilient and fault tolerant asynchronous messaging
JP5331050B2 (ja) データ同期システム、データ同期方法、情報処理装置、情報処理方法、およびプログラム
CN113641640B (zh) 用于流式计算系统的数据处理方法、装置、设备和介质
CN114500416A (zh) 用于最多一次消息投递的投递方法和投递系统
US10169441B2 (en) Synchronous data replication in a content management system
EP3958139B1 (en) Method and system for creating files in a file system
JP2010152591A (ja) データベースシステム、データ処理方法及びデータ処理プログラム
CN116319758A (zh) 数据迁移方法、装置、电子设备及可读存储介质
CN112182003A (zh) 一种数据同步方法和装置
WO2014203728A1 (ja) メッセージ制御システム、メッセージ制御装置、メッセージ制御方法及びプログラム
JP5812512B2 (ja) データベースシステム、マスタースレーブ管理方法およびマスタースレーブ管理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181002

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181129

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181217

R150 Certificate of patent or registration of utility model

Ref document number: 6459654

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150