小编Cos*_*sii的帖子

@Autowired vs @PersistenceContext for EntityManager bean

有什么区别:

@Autowired
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)

与:

@PersistenceContext
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)

这两个选项都适用于我的应用程序,但是我可以通过使用 @Autowired注释来解决问题吗?

spring jpa entitymanager

46
推荐指数
4
解决办法
4万
查看次数

RabbitMQ集群和镜像队列在幕后的行为

有人可以解释在发布到从节点时具有多个节点和队列的RabbitMQ集群中幕后发生的事情吗?

从我读到的内容看来,除了发布之外的所有操作似乎只发送给主服务器,然后主服务器将操作的效果广播到从服务器(这来自文档).根据我的理解,这意味着消费者将始终使用主队列中的消息.此外,如果我向从服务器发送请求以消费消息,则该从服务器将通过访问主服务器以获取该消息来执行额外的跳转.

但是当我发布到从属节点时会发生什么?此节点是否会将消息首先发送给主节点?

在处理奴隶时似乎有这么多额外的跳跃,所以如果你只知道主人,你似乎可以有更好的表现.但是你如何处理主失败?然后其中一个奴隶将被选为主人,所以你必须知道连接到哪里?

要求所有这些因为我们正在使用带有HAProxy的RabbitMQ集群,所以我们可以将集群结构与我们的应用程序分离.这样,无论何时节点完成,HAProxy都将重定向到活动节点.但是当我们杀死其中一个兔子节点时,我们遇到了问题.与兔子的连接是永久性的,所以如果它失败了,你必须重新创建它.此外,在这种情况下,您必须重新发送消息,否则您将丢失它们.

即使有了所有这些,消息仍然可能丢失,因为当我杀死节点时(在某些缓冲区,网络上的某个地方等),它们可能正在传输中.因此,您必须使用事务或发布者确认,以确保在所有镜像填满消息后进行交付.但这是另一个问题.您可能有重复的消息,因为代理可能已发送了从未到达生产者的确认(由于网络故障等).因此,消费者应用程序将需要以幂等方式执行重复数据删除或处理传入消息.

有没有办法避免这种情况?或者我必须决定是否可以丢失一些消息而不是重复某些消息?

high-availability haproxy rabbitmq

9
推荐指数
1
解决办法
6755
查看次数