@ManagedResource public class JdbcChannelMessageStore extends ObjectSE implements PriorityCapableChannelMessageStore, InitializingBean
JDBC を介したリレーショナルデータベースを使用した MessageGroupStore のチャネル固有の実装。このメッセージストアは、メッセージチャネルにのみ使用されます。
そのため、JdbcChannelMessageStore はデータベース固有の SQL クエリを使用します。
JdbcMessageStore に反して、この実装はキューのように動作するように最適化された単一のデータベーステーブルを使用します。テーブルを作成するための SQL スクリプトは org/springframework/integration/jdbc/schema-*.sql にパッケージされています。* はターゲットデータベース型を示します。
| 修飾子と型 | フィールドと説明 |
|---|---|
static StringSE | DEFAULT_REGION メッセージストアのパーティション化に使用されるデフォルトのリージョンプロパティ。 |
static StringSE | DEFAULT_TABLE_PREFIX テーブルプレフィックスプロパティのデフォルト値。 |
| コンストラクターと説明 |
|---|
JdbcChannelMessageStore() 構成用の便利なコンストラクター。 |
JdbcChannelMessageStore(DataSourceSE dataSource) すべての必須プロパティで MessageStore を作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
void | addAllowedPatterns(StringSE... patterns) 逆直列化が許可されているパッケージ / クラスのパターンを追加します。 |
MessageGroup | addMessageToGroup(ObjectSE groupId, Message<?> message) データベースにメッセージを保存します。 |
void | afterPropertiesSet() 必須プロパティ( DataSourceSE および setChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider))を確認してください。 |
protected Message<?> | doPollForMessage(StringSE groupIdKey) このメソッドは、DB への呼び出しを実行して、 JdbcChannelMessageStore のコンテキストではチャネル識別子を意味する MessageGroup で最も古いメッセージを取得します。 |
MessageGroup | getMessageGroup(ObjectSE groupId) 完全には使用されていません。 |
int | getMessageGroupCount() メソッドが実装されていません。 |
protected MessageGroupFactory | getMessageGroupFactory() |
protected StringSE | getQuery(org.springframework.integration.jdbc.store.JdbcChannelMessageStore.Query queryName, java.util.function.SupplierSE<StringSE> queryProvider) 入力のパターンを置き換えて、有効な SQL クエリを生成します。 |
int | getSizeOfIdCache() 現在処理中のメッセージのメッセージ ID をキャッシュするメッセージ ID キャッシュのサイズを返します。 |
boolean | isPriorityEnabled() |
int | messageGroupSize(ObjectSE groupId) 指定されたチャネル ID (groupId) および指定されたリージョン ( setRegion(String)) に保存されているメッセージの数を返します。 |
Message<?> | pollMessageFromGroup(ObjectSE groupId) チャネル識別子を表す特定のグループ ID に対して永続化される新しいメッセージのデータベースをポーリングします。 |
void | removeFromIdCache(StringSE messageId)idCache からメッセージ ID を削除します。 |
void | removeMessageGroup(ObjectSE groupId) この ID のメッセージグループを削除します。 |
void | setChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider channelMessageStoreQueryProvider) 使用するデータベース固有の ChannelMessageStoreQueryProvider を設定します。 |
void | setDataSource(DataSourceSE dataSource) データベースと対話するときに使用する JDBC DataSourceSE。 |
void | setDeserializer(Deserializer<? extends Message<?>> deserializer) バイト配列をメッセージにデシリアライズするためのコンバーター。 |
void | setJdbcTemplate(JdbcTemplate jdbcTemplate) データベースと対話するときに使用する JdbcOperations。 |
void | setLobHandler(LobHandler lobHandler)SQL クエリでラージオブジェクトを作成およびアンパックするために使用される LobHandler をオーバーライドします。 |
void | setMessageGroupFactory(MessageGroupFactory messageGroupFactory)MessageGroupFactory を指定して、必要な場所に MessageGroup オブジェクトを作成します。 |
void | setMessageRowMapper(MessageRowMapper messageRowMapper) カスタム MessageRowMapper を渡すことができます。 |
void | setPreparedStatementSetter(ChannelMessageStorePreparedStatementSetter preparedStatementSetter)ChannelMessageStorePreparedStatementSetter を設定して、メッセージをデータベースに挿入します。 |
void | setPriorityEnabled(boolean priorityEnabled) |
void | setRegion(StringSE region) このストアで保持されるすべてのメッセージの一意のグループ化識別子。 |
void | setSerializer(Serializer<? super Message<?>> serializer) メッセージをストレージ用のバイト配列に直列化するためのコンバーター。 |
void | setTablePrefix(StringSE tablePrefix) テーブルプレフィックスプロパティのパブリック setter。 |
void | setUsingIdCache(boolean usingIdCache) 複数の並列スレッドを使用してデータベースをトランザクションでポーリングする場合、つまり、構成済みのポーラーがタスクエグゼキューターを使用して構成されている場合は、このプロパティの使用を検討してください。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic static final StringSE DEFAULT_REGION
public JdbcChannelMessageStore()
public JdbcChannelMessageStore(DataSourceSE dataSource)
MessageStore を作成します。渡された DataSourceSE は、JdbcTemplate.setFetchSize(int) が 1 に設定され、JdbcTemplate.setMaxRows(int) が 1 に設定された JdbcTemplate をインスタンス化するために使用されます。dataSource - DataSourceSEpublic void setDataSource(DataSourceSE dataSource)
DataSourceSE。渡された DataSourceSE は、JdbcTemplate.setFetchSize(int) が 1 に設定され、JdbcTemplate.setMaxRows(int) が 1 に設定された JdbcTemplate をインスタンス化するために使用されます。dataSource - DataSourceSEpublic void setDeserializer(Deserializer<? extends Message<?>> deserializer)
deserializer - 設定するデシリアライザー public void addAllowedPatterns(StringSE... patterns)
com.foo.*、*.MyClass。patterns - パターン。public void setJdbcTemplate(JdbcTemplate jdbcTemplate)
JdbcOperations。このプロパティまたは dataSource のいずれかを設定できます。fetchSize プロパティが 1 の JdbcTemplate を渡すことを検討してください。これは、Oracle が先入れ先出し (FIFO) メッセージ取得特性を保証するために特に重要です。jdbcTemplate - JdbcOperationspublic void setLobHandler(LobHandler lobHandler)
LobHandler をオーバーライドします。ほとんどすべてのプラットフォームでデフォルトで問題ありませんが、一部の Oracle ドライバーにはネイティブ実装が必要です。lobHandler - LobHandlerpublic void setMessageRowMapper(MessageRowMapper messageRowMapper)
MessageRowMapper を渡すことができます。MessageRowMapper は、永続化されたメッセージを表す選択されたデータベース行を実際の Message オブジェクトに変換するために使用されます。messageRowMapper - null であってはなりません public void setPreparedStatementSetter(ChannelMessageStorePreparedStatementSetter preparedStatementSetter)
ChannelMessageStorePreparedStatementSetter を設定して、メッセージをデータベースに挿入します。preparedStatementSetter - 使用する ChannelMessageStorePreparedStatementSetter。null であってはなりません public void setChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider channelMessageStoreQueryProvider)
ChannelMessageStoreQueryProvider を設定します。JdbcChannelMessageStore は、データベースからメッセージを取得するための SQL クエリを提供します。フレームワークによって提供される実装を確認するには、JavaDocs ChannelMessageStoreQueryProvider(すべての既知の実装クラス)を参照してください。追加のデータベースをサポートする必要がある場合、および / または要件に合わせてクエリを微調整する必要がある場合は、独自のクエリ実装を提供できます。
channelMessageStoreQueryProvider - null であってはなりません。public void setRegion(StringSE region)
DEFAULT_REGION です。region - 設定する領域名 public void setSerializer(Serializer<? super Message<?>> serializer)
serializer - 設定するシリアライザー public void setTablePrefix(StringSE tablePrefix)
DEFAULT_TABLE_PREFIX です。tablePrefix - 設定する tablePrefixpublic void setUsingIdCache(boolean usingIdCache)
複数の並列スレッドを使用してデータベースをトランザクションでポーリングする場合、つまり、構成済みのポーラーがタスクエグゼキューターを使用して構成されている場合は、このプロパティの使用を検討してください。
課題は、pollMessageFromGroup(Object) が指定されたチャネル (groupKey) と領域 (setRegion(String)) の最も古いエントリを検索することです。これを複数のスレッドで実行し、トランザクションを使用している場合、他のスレッドが同じロックされた行を待機している可能性があります。
提供されている OracleChannelMessageStoreQueryProvider を使用する場合は、usingIdCache を true に設定しないでください。Oracle クエリはロックされた行を無視します。
JdbcChannelMessageStore は、ID キャッシュを使用して、処理中、各メッセージ ID をメモリ内コレクションに格納します。これにより、ポーリングスレッドは、それらのメッセージをポーリングから明示的に除外します。
これを機能させるには、対応する TransactionSynchronizationFactory を設定する必要があります。
<int:transaction-synchronization-factory id="syncFactory">
<int:after-commit expression="@jdbcChannelMessageStore.removeFromIdCache(headers.id.toString())" />
<int:after-rollback expression="@jdbcChannelMessageStore.removeFromIdCache(headers.id.toString())" />
</int:transaction-synchronization-factory>
この TransactionSynchronizationFactory は、ポーラーのトランザクション構成で参照されます。
<int:poller fixed-delay="300" receive-timeout="500"
max-messages-per-poll="1" task-executor="pool">
<int:transactional propagation="REQUIRED" synchronization-factory="syncFactory"
isolation="READ_COMMITTED" transaction-manager="transactionManager" />
</int:poller>
usingIdCache - true の場合、ID キャッシュが使用されます。public void setPriorityEnabled(boolean priorityEnabled)
public boolean isPriorityEnabled()
PriorityCapableChannelMessageStore の isPriorityEnabled public void setMessageGroupFactory(MessageGroupFactory messageGroupFactory)
messageGroupFactory - 使用する MessageGroupFactory。protected MessageGroupFactory getMessageGroupFactory()
public void afterPropertiesSet()
DataSourceSE および setChannelMessageStoreQueryProvider(ChannelMessageStoreQueryProvider) ) を確認してください。setMessageRowMapper(MessageRowMapper) および setPreparedStatementSetter(ChannelMessageStorePreparedStatementSetter) を使用して MessageRowMapper および ChannelMessageStorePreparedStatementSetter がそれぞれ明示的に設定されていない場合は、指定された deserializer および lobHandler を使用してデフォルトの MessageRowMapper および ChannelMessageStorePreparedStatementSetter がインスタンス化されます。また、jdbcTemplate の fetchSize プロパティ ( JdbcTemplate.getFetchSize() ) が 1 でない場合、警告がログに記録されます。JdbcChannelMessageStore を Oracle とともに使用する場合、ポーリングされたメッセージの FIFO 特性を保証するために、fetchSize の値が 1 である必要があります。詳細については、Oracle ChannelMessageStoreQueryProvider を参照してください。InitializingBean の afterPropertiesSet public MessageGroup addMessageToGroup(ObjectSE groupId, Message<?> message)
BasicMessageGroupStore の addMessageToGroup groupId - メッセージを保存するグループ IDmessage - メッセージ public MessageGroup getMessageGroup(ObjectSE groupId)
BasicMessageGroupStore の getMessageGroup groupId - グループ識別子。@ManagedAttribute public int getMessageGroupCount()
UnsupportedOperationExceptionSE - メソッドはサポートされていません。protected StringSE getQuery(org.springframework.integration.jdbc.store.JdbcChannelMessageStore.Query queryName, java.util.function.SupplierSE<StringSE> queryProvider)
queryName - 変換される Query。queryProvider - クエリテンプレートを提供するサプライヤー。@ManagedAttribute public int messageGroupSize(ObjectSE groupId)
setRegion(String)) に保存されているメッセージの数を返します。BasicMessageGroupStore の messageGroupSize groupId - グループ識別子。public void removeMessageGroup(ObjectSE groupId)
BasicMessageGroupStoreBasicMessageGroupStore の removeMessageGroup groupId - 削除するグループの ID。public Message<?> pollMessageFromGroup(ObjectSE groupId)
BasicMessageGroupStore の pollMessageFromGroup groupId - グループ識別子。protected Message<?> doPollForMessage(StringSE groupIdKey)
JdbcChannelMessageStore のコンテキストではチャネル識別子を意味する MessageGroup で最も古いメッセージを取得します。groupIdKey - メッセージグループ(チャネル)ID の文字列表現 public void removeFromIdCache(StringSE messageId)
idCache からメッセージ ID を削除します。トランザクションが成功またはロールバックされたら、メッセージ ID キャッシュからメッセージを削除するには、Spring Integration トランザクション同期機能と組み合わせて使用する必要があります。
setUsingIdCache(boolean) が true に設定されている場合にのみ適用可能
messageId - メッセージ識別子。@ManagedMetric public int getSizeOfIdCache()