问题一:Seata中config.txt里面的配置项 能不能在nacos放在同一个 Data ID里面?
config.txt里面的配置项 能不能在nacos放在同一个 Data ID里面?
2023-12-12 10:21:11.807 | INFO 96548 | [traceId:] | main [TID:N/A] i.s.discovery.registry.RegistryFactory | use registry center type: nacos
2023-12-12 10:21:16.275 | INFO 96548 | [traceId:] | main [TID:N/A] c.a.n.client.config.impl.ClientWorker | [fixed-public-127.0.0.1_8848] [subscribe] service.vgroupMapping.fw-tx-group+SEATA_GROUP+public
2023-12-12 10:21:16.275 | INFO 96548 | [traceId:] | main [TID:N/A] c.a.nacos.client.config.impl.CacheData | [fixed-public-127.0.0.1_8848] [add-listener] ok, tenant=public, dataId=service.vgroupMapping.fw-tx-group, group=SEATA_GROUP, cnt=1
2023-12-12 10:21:18.793 | ERROR 96548 | [traceId:] | main [TID:N/A] i.s.c.r.netty.NettyClientChannelManager | Failed to get available servers: service.vgroupMapping.fw-tx-group configuration item is required
io.seata.config.exception.ConfigNotFoundException: service.vgroupMapping.fw-tx-group configuration item is required
at io.seata.discovery.registry.nacos.NacosRegistryServiceImpl.lookup(NacosRegistryServiceImpl.java:151)
at io.seata.core.rpc.netty.NettyClientChannelManager.getAvailServerList(NettyClientChannelManager.java:277)
at io.seata.core.rpc.netty.NettyClientChannelManager.reconnect(NettyClientChannelManager.java:213)
at io.seata.core.rpc.netty.TmNettyRemotingClient.initConnection(TmNettyRemotingClient.java:288)
at io.seata.core.rpc.netty.TmNettyRemotingClient.init(TmNettyRemotingClient.java:196)
at io.seata.tm.TMClient.init(TMClient.java:47)
at io.seata.spring.annotation.GlobalTransactionScanner.initClient(GlobalTransactionScanner.java:224)
at io.seata.spring.annotation.GlobalTransactionScanner.afterPropertiesSet(GlobalTransactionScanner.java:470)"
参考回答:
看下这个:https://seata.io/zh-cn/docs/user/configuration/nacos.html
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/584815
问题二:Seata为什么使用了@GlobalTransactional之后会出现空指针的错误?
Seata为什么使用了 @GlobalTransactional之后会出现空指针的错误,但是把 @GlobalTransactional去掉之后就正常了?
参考回答:
mysql驱动版本更换下试试看
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/584813
问题三:百问求答(15)Seata问题专场!回答问题赢暖风机等好礼
我这里创建一个普通表单,比如说这个表单内容是一个产品的配方,包含了各种材料和对应的重量,但是材料的配比重量因为产品不断更新升级会进行调整变化,修改了某一种材料的配比重量。怎么能够既显示当前配比,又能看到每次修改之前的配比,相当于有一个查询记录功能呢,这种可以实现吗,该怎么搭建表单呢
参考回答:
这个建议使用中间表方案。
中间表记录产品信息、重量和配比重量
在当前表提交成功的时候,使用集成自动化新增数据到中间表里面,再结合关联查询功能,关联中间表,这样每次提交数据的时候,都可以看到历史配比。
具体实现:
新增数据到中间表:
最终效果:
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/584169
问题四:一般seata server 是用 file,db还是redis模式?
一般seata server 是用 file,db还是redis模式?
参考回答:
Seata Server 的模式选择取决于具体的业务需求和环境条件。以下是对三种模式的简要说明:
- File 模式:
File 模式是 Seata 的默认模式,它使用文件系统来存储事务相关的信息。这种模式简单易用,不需要额外的数据库支持,适合于开发环境和小型生产环境。但是,由于文件系统的性能和扩展性限制,当事务数量增大或者需要高并发处理时,File 模式可能无法满足需求。 - DB 模式:
DB 模式使用关系型数据库(如 MySQL、PostgreSQL 等)来存储事务信息。相比 File 模式,DB 模式具有更好的性能、稳定性以及数据一致性保障。在大规模分布式系统中,尤其是在事务数量大、并发高的场景下,DB 模式通常是更好的选择。然而,这也意味着需要额外维护一个数据库,并确保其高可用性和性能。 - Redis 模式:
Redis 模式使用 Redis 这种内存数据库来存储事务信息。Redis 提供了快速的数据读写能力,适合于对性能要求较高的场景。然而,Redis 模式可能会受到内存大小的限制,且在某些情况下数据持久化和一致性保障可能不如 DB 模式。
在实际应用中,选择哪种模式通常需要考虑以下因素:
- 业务规模和并发量:对于大型和高并发的系统,DB 或 Redis 模式可能更适合。
- 数据一致性要求:如果对数据一致性有较高要求,DB 模式可能是更好的选择。
- 现有基础设施:如果已经有一个稳定的数据库环境,使用 DB 模式可以充分利用现有资源。
- 性能需求:如果对性能有极高要求,Redis 模式可能是一个好选择,但需要确保有足够的内存资源。
总的来说,没有一种模式是绝对的最佳选择,而是需要根据具体的应用场景和需求进行权衡。在一些复杂环境中,甚至可能需要结合使用多种模式来满足不同的需求。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/583227
问题五:各位大佬能不能解答一下Seata这个异常呀?
各位大佬能不能解答一下Seata这个异常呀?process connectionProxy commit error: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Type id handling not implemented for type java.lang.Object (by serializer of type com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer) (through reference chain: io.seata.rm.datasource.undo.BranchUndoLog["sqlUndoLogs"]->java.util.ArrayList[0]->io.seata.rm.datasource.undo.SQLUndoLog["afterImage"]->io.seata.rm.datasource.sql.struct.TableRecords["rows"]->java.util.ArrayList[0]->io.seata.rm.datasource.sql.struct.Row["fields"]->java.util.ArrayList[2]->io.seata.rm.datasource.sql.struct.Field["value"])java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Type id handling not implemented for type java.lang.Object (by serializer of type com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer) (through reference chain: io.seata.rm.datasource.undo.BranchUndoLog["sqlUndoLogs"]->java.util.ArrayList[0]->io.seata.rm.datasource.undo.SQLUndoLog["afterImage"]->io.seata.rm.datasource.sql.struct.TableRecords["rows"]->java.util.ArrayList[0]->io.seata.rm.datasource.sql.struct.Row["fields"]->java.util.ArrayList[2]->io.seata.rm.datasource.sql.struct.Field["value"])
参考回答:
这个异常看起来是Seata在处理JSON序列化时遇到的问题,可能是由于某个对象的类型无法被Jackson正确识别和处理。你需要检查相关代码和数据结构,确保所有的字段和类型都能被Jackson正确处理。可能的解决方法包括添加或修改Jackson的序列化和反序列化配置,或者修改数据结构以避免使用无法被Jackson处理的类型。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/583226