You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

client.go 1.2 kB

2 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package agent
  2. import (
  3. "sync"
  4. "gitlink.org.cn/cloudream/common/pkgs/mq"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. stgmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq"
  7. )
  8. type Client struct {
  9. rabbitCli *mq.RabbitMQTransport
  10. id cdssdk.HubID
  11. }
  12. func NewClient(id cdssdk.HubID, cfg mq.Config) (*Client, error) {
  13. rabbitCli, err := mq.NewRabbitMQTransport(cfg, stgmq.MakeAgentQueueName(int64(id)), "")
  14. if err != nil {
  15. return nil, err
  16. }
  17. return &Client{
  18. rabbitCli: rabbitCli,
  19. id: id,
  20. }, nil
  21. }
  22. func (c *Client) Close() {
  23. c.rabbitCli.Close()
  24. }
  25. type Pool interface {
  26. Acquire(id cdssdk.HubID) (*Client, error)
  27. Release(cli *Client)
  28. }
  29. type pool struct {
  30. mqcfg mq.Config
  31. shareds map[cdssdk.HubID]*Client
  32. lock sync.Mutex
  33. }
  34. func NewPool(mqcfg mq.Config) Pool {
  35. return &pool{
  36. mqcfg: mqcfg,
  37. shareds: make(map[cdssdk.HubID]*Client),
  38. }
  39. }
  40. func (p *pool) Acquire(id cdssdk.HubID) (*Client, error) {
  41. p.lock.Lock()
  42. defer p.lock.Unlock()
  43. cli, ok := p.shareds[id]
  44. if !ok {
  45. var err error
  46. cli, err = NewClient(id, p.mqcfg)
  47. if err != nil {
  48. return nil, err
  49. }
  50. p.shareds[id] = cli
  51. }
  52. return cli, nil
  53. }
  54. func (p *pool) Release(cli *Client) {
  55. // TODO 定时关闭
  56. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。