我们在项目设置中使用Flask和nameko以及RabbitMQ。我们将它用于多个项目(我们已在2个月前开始),并且在开发时我们遇到服务名称问题。
我们有两个项目--A和B,它们都有UserService(具有不同的功能):
class UserService:
name = 'user_service'
...
问题是当我们需要在同一台机器上运行两个项目时,一个用户服务无法运行。确切地说,两者都有效,但所有请求都由其中一个处理,并且由于它们的结构不同,我们遇到了错误。
第一个想法是将项目前缀添加到服务名称,例如A_user_service
,但这是非常难看的解决方案(在rpc
部分我们需要调用类似rpc.A_user_service
的内容太可怕了。 nameko项目是否有任何类型的命名空间?我们尝试在配置中将rpc_excange
参数设置为每个项目不同,但这不是我们解决的问题。
答案 0 :(得分:1)
我想这有点取决于你如何定义“项目”。服务名称是主命名空间,因此如果这两个用户服务有可能共存,它们应该使用不同的(可能更具体的)服务名称。
如果它们完全分开(例如为两个独立的客户开发),那么使用单独的rabbitmq vhost
可以解决您的问题吗?这样你最终就会运行两个独立的“集群”服务,其中vhost a中的任何内容都无法在vhost b中看到或与任何内容交谈(当然,如果你愿意,你可以在两者中运行服务x的实例,例如服务将在两个客户端站点/网络上运行)