|
25 | 25 | import org.springframework.amqp.core.Message; |
26 | 26 | import org.springframework.amqp.core.ReturnedMessage; |
27 | 27 | import org.springframework.amqp.rabbit.connection.CorrelationData; |
| 28 | +import org.springframework.amqp.rabbit.connection.SimpleResourceHolder; |
28 | 29 | import org.springframework.stereotype.Component; |
29 | 30 |
|
30 | 31 | import java.util.Date; |
@@ -143,6 +144,11 @@ public void checkBeforeSend(BaseTxMsg txMsg, MsgOption msgOption) { |
143 | 144 | if (ObjUtil.isEmpty(txMsg.getId())) { |
144 | 145 | ((TxMsg) txMsg).setId(String.valueOf(IdWorker.getId(txMsg))); |
145 | 146 | } |
| 147 | + // 填充 connectionName |
| 148 | + if (ObjUtil.isEmpty(txMsg.getConnectionName())) { |
| 149 | + String connectionName = (String) SimpleResourceHolder.get(RabbitUtil.template().getConnectionFactory()); |
| 150 | + ((TxMsg) txMsg).setConnectionName(connectionName); |
| 151 | + } |
146 | 152 | } |
147 | 153 |
|
148 | 154 | @Override |
@@ -190,18 +196,27 @@ public void sendCommitted(BaseTxMsg txMsg, MsgOption msgOption) { |
190 | 196 | } |
191 | 197 |
|
192 | 198 | private void doSendCommittedOrRetry(BaseTxMsg txMsg) { |
193 | | - // 放入 txMsg id |
194 | | - CorrelationData correlationData = new CorrelationData(txMsg.getId()); |
195 | | - RabbitUtil.send(txMsg.getExchange(), txMsg.getRoutingKey(), txMsg.getMessage(), msg -> { |
196 | | - // 设置事务消息 head 标记 |
197 | | - msg.getMessageProperties().getHeaders().put(HEAD_TX_MSG_ID, txMsg.getId()); |
198 | | - msg.getMessageProperties().getHeaders().put(HEAD_TX_MSG_BIZ_TYPE, txMsg.getBizType()); |
199 | | - msg.getMessageProperties().getHeaders().put(HEAD_TX_MSG_BIZ_KEY, txMsg.getBizKey()); |
200 | | - // 设置 ReturnedMessage,用于 callback 中获取消息 |
201 | | - ReturnedMessage defaultReturnedMessage = new ReturnedMessage(msg, 0, DEFAULT_TX_MSG_REPLY_TEXT, null, null); |
202 | | - correlationData.setReturned(defaultReturnedMessage); |
203 | | - return msg; |
204 | | - }, correlationData); |
| 199 | + try { |
| 200 | + if (ObjUtil.isNotNull(txMsg.getConnectionName())) { |
| 201 | + SimpleResourceHolder.bind(RabbitUtil.template().getConnectionFactory(), txMsg.getConnectionName()); |
| 202 | + } |
| 203 | + // 放入 txMsg id |
| 204 | + CorrelationData correlationData = new CorrelationData(txMsg.getId()); |
| 205 | + RabbitUtil.send(txMsg.getExchange(), txMsg.getRoutingKey(), txMsg.getMessage(), msg -> { |
| 206 | + // 设置事务消息 head 标记 |
| 207 | + msg.getMessageProperties().getHeaders().put(HEAD_TX_MSG_ID, txMsg.getId()); |
| 208 | + msg.getMessageProperties().getHeaders().put(HEAD_TX_MSG_BIZ_TYPE, txMsg.getBizType()); |
| 209 | + msg.getMessageProperties().getHeaders().put(HEAD_TX_MSG_BIZ_KEY, txMsg.getBizKey()); |
| 210 | + // 设置 ReturnedMessage,用于 callback 中获取消息 |
| 211 | + ReturnedMessage defaultReturnedMessage = new ReturnedMessage(msg, 0, DEFAULT_TX_MSG_REPLY_TEXT, null, null); |
| 212 | + correlationData.setReturned(defaultReturnedMessage); |
| 213 | + return msg; |
| 214 | + }, correlationData); |
| 215 | + } finally { |
| 216 | + if (ObjUtil.isNotNull(txMsg.getConnectionName())) { |
| 217 | + SimpleResourceHolder.unbindIfPossible(RabbitUtil.template().getConnectionFactory()); |
| 218 | + } |
| 219 | + } |
205 | 220 | } |
206 | 221 |
|
207 | 222 | @Override |
|
0 commit comments