消息服务metaq Notify

MetaQ是一款具有高性能、高可靠、高实时特性的分布式消息中间件,支持亿级消息堆积,提供丰富的消息拉取模式及高效扩展能力。它通过无单点、可自由扩展的设计确保系统的稳定运行。

Notify在设计思路上与传统的MQ有一定的不同,他的核心设计理念是
1. 为了消息堆积而设计系统。消费者出现问题是个非常常见的情况,而消息系统则必须能够在后端消费不稳定的情况下,仍然能够保证用户写入的正常并且TPS不降。
2. 无单点,可自由扩展的设计

 

MetaQ对外提供的是一个队列服务,内部实现也是完全的队列模型,这里的队列是持久化的磁盘队列,具有非常高的可靠性,并且充分利用了操作系统cache来提高性能。

  • 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
  • Producer、Consumer、队列都可以分布式。
  • Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合。
  • 能够保证严格的消息顺序
  • 提供丰富的消息拉取模式
  • 高效的订阅者水平扩展能力
  • 实时的消息订阅机制
  • 亿级消息堆积能力


    n  广播消费

    一条消息被多个Consumer消费,即使这些Consumer属于同一个Consumer Group,消息也会被Consumer Group中的每个Consumer都消费一次。

    在CORBA Notification规范中,消费方式都属于广播消费。

    n  集群消费

    一个Consumer Group中的Consumer实例平均分摊消费消息,类似于JMS规范中的Point-to-Point Messaging

    特点如下:

    u  Each message has only one consumer.

    u  A sender and a receiver of a message have no timing dependencies. The receiver can fetch the message whether or not it was running when the client sent the message.

    u  The receiver acknowledges the successful processing of a message.

    n  主动消费

    Consumer主动向Broker发起获取消息请求,控制权完全在于Consumer应用。

    类似于JMS规范中描述的Synchronously方式消费

    n  被动消费

    Consumer注册一个Callback接口,由Metaq后台自动从Broker接收消息,并回调Callback接口。

    类似于JMS规范中的描述的Asynchronously方式消费

    n  顺序消息

    消费消息的顺序要同发送消息的顺序一致,在Metaq中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,且发送到同一个队列,这样Consumer就可以按照Producer发送的顺序去消费消息。

    n  普通顺序消息

    顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker重启,由于队列总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。

    n  严格顺序消息

    顺序消息的一种,无论正常异常情况都能保证顺序,但是牺牲了分布式Failover特性。

### 中间件 Notify 使用方法 #### 1. 基本概念 Notify 是阿里巴巴开发的一款消息中间件,主要用于支持分布式系统的异步通信和事务处理。它特别适合用于实现 BASE 理论中的最终一致性模型[^2]。 #### 2. 配置环境 在使用 Notify 中间件之前,需要配置以下几个核心组件: - **Config Server**: 负责维护 Notify Server 的地址列表。 - **Diamond**: 维护订阅关系,包括 Topic、Message Type 和 Group ID 等信息[^3]。 这些组件可以通过以下方式集成到项目中: ```xml <dependency> <groupId>com.taobao.hsf</groupId> <artifactId>hsf-client</artifactId> <version>1.x</version> </dependency> ``` 如果使用的 HSF 版本较旧(如 HSF 1.x),则需显式引入 `com.taobao.hsf.notify.client.NotifyManagerBean` 来管理消息发送逻辑[^1]。 #### 3. 初始化 Notify 客户端 初始化客户端时,通常会涉及以下参数设置: - **Topic**: 主题名称,定义消息分类。 - **MessageType**: 消息类型,区分不同业务场景的消息。 - **GroupID**: 订阅组标识符,用于分组不同的消费者实例。 以下是初始化代码示例: ```java import com.taobao.hsf.notify.client.NotifyManagerBean; public class NotifyClient { private static final String TOPIC = "example_topic"; private static final String MESSAGE_TYPE = "example_message_type"; private static final String GROUP_ID = "example_group_id"; public void init() { NotifyManagerBean notifyManager = new NotifyManagerBean(); notifyManager.setTopic(TOPIC); notifyManager.setMessageType(MESSAGE_TYPE); notifyManager.setGroupId(GROUP_ID); try { notifyManager.start(); // 启动 Notify 客户端 } catch (Exception e) { System.err.println("Failed to start Notify client: " + e.getMessage()); } } public void sendMessage(String messageContent) { boolean success = notifyManager.sendMessage(messageContent); if (!success) { System.err.println("Failed to send message: " + messageContent); } } } ``` 上述代码展示了如何创建并启动一个 Notify 客户端,并提供了一个简单的消息发送接口。 #### 4. 实现分布式事务 Notify 支持基于消息的分布式事务机制,在某些情况下可以用来替代强一致性的两阶段提交协议。具体来说,通过生产者先写本地日志再发消息的方式,配合消费者的幂等消费能力,可实现最终一致性[^5]。 例如,在用户注册流程中,当用户成功注册后,系统可通过 Notify 将事件广播给其他模块(如支付服务或通知服务)。即使部分下游服务暂时不可用,也不会影响主流程的执行结果。 #### 5. 注意事项 - 如果项目的重点在于顺序消息传递或者实时流计算,则建议考虑 MetaQ 或 RocketMQ 等更适合该场景的产品[^4]。 - 对于 Notify 的部署与运维工作量较大,因为它依赖多个外部服务(如 Config Server 和 Diamond)来协同运作。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值