【发布时间】:2020-03-24 15:37:16
【问题描述】:
我有一个应用程序,它使用Event Message 上生成的号码eventNumber 作为消息ID 来生成Notification Message。 eventNumber 保证是唯一的并且不断增加。
所以对于每个 genNum,我们都会生成一条通知消息。
eventNumber on EventMsg | Notification Msg ID
---------------------------------------------
23 | 23
31 | 31
37 | 37
我们使用Notification message 中的消息ID 来跟踪是哪个Event message 产生的。假设我们有一个 ID 为123 的通知消息。使用该 ID 123,我们可以说带有 123 的事件消息产生了该通知消息。
问题在于,事件消息可能需要生成 2 条通知消息的情况很少见。由于每个Notification Message 都必须是唯一的,这是一个问题。
假设我们有一个 ID 为 456 的事件,它要求我们生成 2 条通知消息。这是一个问题,因为我们希望每条通知消息都有一个唯一的 Id。这意味着我们不能使用 456 作为两条通知消息的消息 ID。
有没有办法仍然使用事件消息 ID 456 为 2 条通知消息生成唯一 ID?这个生成的 ID 应该仍然可以解码它来自 ID 为 456 的事件这一事实。
所有长类型的id/数字。
到目前为止,我的简单解决方案是针对每个事件 ID,乘以 10,然后增加第二个。所以
456 变为 4560。通知消息 1 的 ID 分别为 4560 和 4561。有没有更好的方法来解决这个问题?感谢您抽出宝贵时间阅读此问题
【问题讨论】:
-
你的方式有什么问题?对我来说似乎很好。
-
@Oleg 我想验证我的实现(逻辑)并看看是否有更好的方法。
-
(A) 当您的现有消息 ID 为 4560 时,当事件 ID 最终上升到 4560 时,您的系统会感到困惑吗? (B) 我建议你学习 128 位 UUID,而不是把精力放在自己的聪明方法上。
-
@BasilBourque 每个通知都有一个名称字段。所以它只需要在名称之间是唯一的。
标签: java bit-manipulation unique long-integer