调查一下,我验证了例如在下面的场景中没有回滚值"myInt"
int myInt = 10;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
myInt=20;
Transaction t = Transaction.Current;
t.Rollback();
}
Run Code Online (Sandbox Code Playgroud)
所以它让我想到"TransactionScope是否只回滚与数据库相关的活动?或者事务可以管理其他事情,我不知道那些?"
为了简化我的问题,我有
App1与@Transactionnal方法createUser():
App2与RabbitMQ消息消失
问题是,有时,App2尝试在App1上提交事务之前使用RabbitMQ消息.这意味着App2无法读取数据库上的邮件数据,因为尚未创建用户.
一些解决方案可能是:
我已经看到Spring中有一个RabbitTransactionManager,但我无法理解它应该如何工作.事务处理内容似乎总是有点难以理解,文档也没有那么多帮助.
有没有办法做这样的事情?
怎么样?如果我发送同步RabbitMQ消息而不是异步消息,那么可以期待什么呢?它会阻止等待响应的线程吗?因为我们确实为不同的用例发送同步和异步消息.
以下问题旨在认真而不是轻浮.我缺乏分布式系统的经验,但我确实理解Basic Paxos如何工作以及为什么领导者选择是有用的.不幸的是,我的理解还不够深入,无法理解下面的问题.
在关于交易提交的共识,第8页(链接PDF的第11页)中,我们有以下声明.
选择独特的领导者等同于解决共识问题.
如果这个陈述是真的,并且Paxos的目的是达成共识,为什么Paxos本身并不常用于领导者选举?
此外,同一篇论文赞同领导者选举算法描述的稳定领袖选举论文.
如果这两个问题是等价的,并且同一篇论文支持不同的领导者选举算法,为什么不使用其他算法来解决一般共识问题而不是Paxos?
distributed protocols distributed-transactions consensus paxos
我正在尝试运行将参与分布式事务的WCF Web服务.我一直收到以下错误消息......
找不到配置绑定扩展'system.serviceModel/bindings/myBinding'.验证此绑定扩展是否已在system.serviceModel/extensions/bindingExtensions中正确注册,并且拼写正确
这是web.config
<system.serviceModel>
<services>
<service name = "DistServiceX">
<endpoint
address=""
binding="myBinding"
contract="IDistService"
/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding
name="myBinding"
transactionFlow="true"
/>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
Run Code Online (Sandbox Code Playgroud)
有人能看出这有什么问题吗?这让我疯狂!
谢谢
皮特
在我的职业生涯中,我一直致力于数据分析,BI工具等.我工作的大多数应用程序都是主要的只读应用程序.虽然我也曾在简单的CRUD应用程序上工作,但没有什么特别的交易.作为一名软件工程师,我觉得如果我不知道如何设计高度交易系统和数据库,如亚马逊,航空公司系统等的工作方式,我的学习中就会出现空白.我想请社区人士就这个问题提出一些资源,书籍或简单项目.在教授必要的理论的同时可以采用实践方法的东西.我知道这是一个主观问题,但我可以将最有用的答案标记为绿色.期待您的建议并感谢您的期待.
distributed database-design transactions high-availability distributed-transactions
我已经看到了关于如何在两个不同的SQL服务器上查询两个不同表的所有引用,我理解它是如何实现的.但是,该命令似乎不适用于使用##.创建的临时表.
如果我在一台服务器上编写一个连接,并且它在该服务器上引用一个临时表,在另一台服务器上引用一个临时表,则SQL Server会假定因为##它在命令中,它会自动查看本地服务器tempdb,而不是远程服务器一.我此时也无法使用OPENROWSET,因为该功能已被禁用,我必须获得批准才能重新启用.
所以我的问题是有一种方法可以重新配置这个命令以识别tempdb要查看的内容吗?
SELECT *
FROM (##mytemptable1 Demog
INNER JOIN MyServer.tempdb.dbo.##mytemptable2 PeakInfo ON (Demog.SAMPLE_NO = PeakInfo.SampleNum) AND (Demog.JOB_NO = PeakInfo.JobNum) )
ORDER BY PeakInfo.JobNum, PeakInfo.SampleNum, PeakInfo.Replicate ,PeakInfo.Reinjection ,PeakInfo.PeakNameCustSort
Run Code Online (Sandbox Code Playgroud) 我们决定对Azure数据库使用微操作.由于我们的业务只需要"插入"和"选择",我们决定禁止所有代码管理SqlTransaction(没有数据的并发问题).
然后,我们注意到我们的Azure数据库实例反应非常缓慢." rpc completed "事件发生的延迟是运行简单sql语句所需时间的数百倍.
接下来,我们使用EF6对代码进行基准测试,我们发现服务器响应非常快.当EF6实现内置事务时,我们决定恢复SqlTransaction微观orm上的(ReadCommited),我们发现一切都很好.
Azure数据库是否需要显式SqlTransaction(由代码管理)?SqlTransactionAzure数据库的表现如何影响?为什么这样实现?
编辑:我将发布一些关于我们收集痕迹的方式的更准确的信息.我们的Azure事件日志有时以纳秒表示,有时以毫秒为单位.看起来很奇怪.
ado.net distributed-transactions micro-orm entity-framework-6 azure-sql-database
我想了解如果我设置了分布式事务功能是否适用于我的应用程序 com.atomikos.icatch.enable_logging=false
com.atomikos.icatch.enable_logging=falsecom.atomikos.icatch.enable_logging=false如果并非所有分布式事务的参与者都已提交,则可能导致数据库的状态不一致?更新 我在这个问题之后被触发,以便更多地了解我在这里描述的分布式事务的内部结构: 如何调整分布式(XA)事务的性能?
我有一个正在侦听队列的spring JMS侦听器.一旦消息到达输入队列,它就对消息进行某些处理,并将消息放到多个其他队列中进行进一步处理(我们可以将这些其他队列称为输出队列).当它发布到其他输出队列时,如果将消息发布到其中一个输出队列可能由于任何原因而失败,我想确保在故障之前完成的输出队列的其他帖子被回滚.基本上我想确保它作为原子操作.在侦听器/容器上是否有任何注释/配置可用于在单个事务中实现此目的.
这是我正在使用的配置
<jms:listener-container acknowledge="transacted" cache="session" connection-factory="jmsSecurityFactory" concurrency="1" container-type="default" container-class="abc.xyz">
<jms:listener id="listenerId" destination="inputQueue" ref="" />
</jms:listener-container>
<beans:bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<beans:property name="sessionTransacted" value="true"></beans:property>
<beans:property name="connectionFactory" ref="inCachingConnectionFactory"></beans:property>
</beans:bean>
<beans:bean id="inCachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<beans:property name="targetConnectionFactory" ref="jmsSecurityFactory" />
</beans:bean>
<beans:bean id="jmsSecurityFactory"
class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<beans:property name="targetConnectionFactory" ref="jmsConnectionFactory" />
<beans:property name="username" value=" " />
<beans:property name="password" value=" " />
</beans:bean>
<beans:bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<beans:property name="hostName" value="${mq.conn.hostName}" />
<beans:property name="port" value="${mq.conn.hostPort}" />
<beans:property name="queueManager" value="${mq.conn.queueManager}" />
<beans:property name="channel" value="${mq.conn.channel}" />
<beans:property name="transportType" value="${mq.conn.transportType}" />
<beans:property name="useConnectionPooling" value="true"></beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
它看起来像JMS模板和监听器容器都引用相同的连接工厂bean(jmsConnectionFactory)
java spring transactions distributed-transactions spring-jms
我有一张Table1关于SQL Server 2014和MySQL 的表.
Table1
ID INT,Code VARCHAR(100)
Run Code Online (Sandbox Code Playgroud)
我MyLinkedServer使用"Microsoft OLEDB Provider for ODBC"在SQL Server中创建了一个链接服务器.
**链接服务器**
EXEC master.dbo.sp_addlinkedserver @server = N'MyLinkedServer', @srvproduct=N'MyLinkedServer', @provider=N'MSDASQL', @datasrc=N'MyLinkedServer'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MyLinkedServer',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='########'
Run Code Online (Sandbox Code Playgroud)
链接服务器设置
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'remote proc transaction promotion', @optvalue=N'true'
Run Code Online (Sandbox Code Playgroud)
链接服务器已成功创建,我可以在SQL Server中查询Mysql表.
询问
我跑的时候
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
Run Code Online (Sandbox Code Playgroud)
记录已插入.但是,当我启动一个事务并运行时INSERT,我收到一个错误:
BEGIN TRAN
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
COMMIT
Run Code Online (Sandbox Code Playgroud)
错误:
链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"返回消息"[MySQL] [ODBC 5.3(a)驱动程序]不支持可选功能".消息7391,级别16,状态2,行8无法执行操作,因为链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"无法启动分布式事务.
到目前为止我尝试过的.
在MSDTC中启用XA事务 …
transactions ×4
distributed ×2
java ×2
spring ×2
sql-server ×2
ado.net ×1
atomikos ×1
c# ×1
consensus ×1
database ×1
micro-orm ×1
mysql ×1
paxos ×1
protocols ×1
rabbitmq ×1
spring-jms ×1
wcf ×1
xa ×1