独立开发者,全栈TypeScript,前端Tanstack、后端hono
之前一直用 amqplib
这个库进行RabbitMQ操作,但是他没有像 tRPC 那样实现端到端类型安全,经常会遇到:
producer改动了routing、数据结构,那consumer就得过一遍集成测试,看看哪里受到影响,不仅麻烦也导致mq里经常一大堆垃圾数据。
其实本质是类型安全的问题,如果消费者可以实时推断生产者的类型,就完美解决这个问题,啃了tRPC的源码后学习了他的设计理念,最终实现了端到端类型安全。
这种契约耦合是必须的,起到了约束、保护的作用,换取了强大的类型安全和开发效率,带来的收益有:
- 防止拼写错误:
user.creatd
在编译时就会报错。 - 确保了数据结构的统一
- 强制了契约变更的可见性,生产者修改了契约,共用的契约迫使消费者进行协调更新
- 契约就是活文档(数据结构,routing、exchange、queue)