ほとんどのメッセージ指向ミドルウェアは、例外なくActiveMQの、トランザクションメッセージングをサポートしています。
問題の定義およびACIDプロパティは、ここでそれらを繰り返すありません。
、MySQLデータベースのコントラスト
事務のMySQLの概念、
ActiveMQのは、トランザクションの概念を持っています
ここでは地元の情勢であること、rocketMqは、分散トランザクションをサポートしています
JDBCデータベースへのアクセスを規制するために開発されたJava
同じ
Javaはまた、ミドルウェアメッセージングへのアクセスを規制するために、JMS(Javaのメッセージサービス)で、ActiveMQの仕様が完全にサポートされてjms1.1
そのJavaは、MySQLのでトランザクションを実装します
おそらくあまりこれ以上何も:
public static void main(String[] args) {
Connection conn =getConnection();
try {
conn.setAutoCommit(false);
insertUser(conn);
insertAddress(conn);
conn.commit();
} catch (SQLException e) {
System.out.println("************事务处理出现异常***********");
e.printStackTrace();
try {
conn.rollback();
System.out.println("*********事务回滚成功***********");
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
:その後、我々は、テキストの接続春の統合にActiveMQを
実装する方法を見とるActiveMQのトランザクション・メッセージングを
@Test
public void p2pSender() {
//获取连接工厂
ConnectionFactory connectionFactory = jmsQueueTemplate.getConnectionFactory();
Session session = null;
try {
Connection connection = connectionFactory.createConnection();
// 参数一:是否开启消息事务
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(session.createQueue("test.trsaction"));
//发送10条消息,开启事务后,要么一起成功,要么一起失败
for (int i = 0; i < 10; i++) {
if (i == 4) {
//出现异常
// throw new RuntimeException("i cannot equals 4");
}
TextMessage textMessage = session.createTextMessage("消息-----" + i);
producer.send(textMessage);
}
//开启事务后,需要手动提交
session.commit();
} catch (JMSException e) {
e.printStackTrace();
//消息事务回滚
try {
session.rollback();
} catch (JMSException ex) {
ex.printStackTrace();
}
}
}
図では、我々は、手動で例外を作成しました。
10件のメッセージを正常に送信することができます:いいえ例外はとき
私たちは、そのラインのオープンを異常が
再び実行します。
コンソールから見つけることができ、情報が出て送信されませんでした。
それは今持っているトランザクションの効果です。
また、言及すべきです。
春への統合後、春のトランザクション管理を委託する必要があります。
MySQLの場合、我々は構成されDatasourceTransactionManager
、
@Transactional注釈が可能使用してください。
ActiveMQのために同じですが、使用がJmsTransactionManagerです。
また、ここではそれらを繰り返さないで、この分散トランザクション、MySQLとリソースマネージャ(RM)としてActiveMQのと同じで、完全にサポートされていない、あまりでこのActiveMQの、XAプロトコルを達成していることに注意してください。