请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于微服务架构图与transfer service

  1. 如图,在架构图中,download和upload是通过accountservice来验证token的,但是在实际代码中,Authorize是在apigw里面的,是不是有点不匹配?
    图片描述
  2. 在filestore-server/service/transfer/main.go里面:
func startRPCService() {
	service := micro.NewService(
		micro.Name("go.micro.service.transfer"), 
		micro.RegisterTTL(time.Second*10),      
		micro.RegisterInterval(time.Second*5), 
		micro.Flags(common.CustomFlags...),
	)
	service.Init(
		micro.Action(func(c *cli.Context) {
			mqhost := c.String("mqhost")
			if len(mqhost) > 0 {
				log.Println("custom mq address: " + mqhost)
				mq.UpdateRabbitHost(mqhost)
			}
		}),
	)
	/*******************************************/
	//为什么要在transfer里面Init dbproxy,有什么讲究吗
	/*******************************************/
	dbproxy.Init(service)

	if err := service.Run(); err != nil {
		fmt.Println(err)
	}
}

在filestore-server/service/dbproxy/client里面:

func Init(service micro.Service) {
	//这里为什么要用transfer创建的service,好像直接一个空的NewService也可以?
	//因为只需要Client呀?
	dbCli = dbProto.NewDBProxyService("go.micro.service.dbproxy", service.Client())
}

正在回答 回答被采纳积分+3

2回答

xiaomo 2019-11-29 22:16:20

同学你好,关于第一个问题,这里的确没有实现完整的逻辑,多谢指出。准确来说,无论是apigw, 还是upload, download这些服务的访问,都是需要经过验证的(除了一些本身不需要安全认证的接口,比如注册)。所以对于apigw,实际也是要通过rpc来访问accountservice来校验访问的有效性。accountservice作为全局的认证中心的角色而存在。已有计划根据同学们的反馈做课程的后续补充,可能会新增一些章节,敬请关注。

0 回复 有任何疑惑可以回复我~
提问者 MichaelZENG 2019-11-29 01:30:21

关于第二个问题,好像按照代码里面的逻辑的话,所有需要操作数据库的function call都是使用的transfer的service.client()呀?好像。。。有点奇怪?

是不是说明UserService, Download, Upload, Transfer用的都是同一个micro,Service客户端来访问dbproxy? 这样不会造成拥堵吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 MichaelZENG #1
    哦,我看到了,好像UserService, Download, Upload, Transfer都会call一次dbproxy.Init() 但是这样的话有两个问题: 1. 这样不会使得dbproxy里面的变量dbCli只会指向最后一个call dbproxy.Init()的service的client吗?2. 在实际运行的时候,dbproxy可以分辨出是哪一个service在调用dbproxy/client里面的函数吗?3.以及为什么mq要init两次,一次在upload/main.go里,一次在transfer/main.go里
    回复 有任何疑惑可以回复我~ 2019-11-29 05:18:54
  • xiaomo 回复 提问者 MichaelZENG #2
    1. 目前UserService, Download, Upload, Transfer都是单独的一个微服务,是独立的进程,dbCli也就不会相互影响,所以不会存在你所说的问题。我应该没有理解错你的意思?
    回复 有任何疑惑可以回复我~ 2019-11-29 22:19:12
  • xiaomo 回复 提问者 MichaelZENG #3
    dbproxy可以分辨出具体是哪个service的调用,只要调用方service在请求时带上对应的标记参数。
    回复 有任何疑惑可以回复我~ 2019-11-29 22:21:49
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信