Какой ctx я должен использовать в параметре запуска hystrix. Делает ли функция пакета hystrix- go? CTX с верхнего уровня или context.Background ()? - PullRequest
0 голосов
/ 22 апреля 2020

Какой ctx следует использовать в параметре run функции hystrix.Do пакета hystrix-go? ctx с верхнего уровня или context.Background ()? Спасибо.

package main

import(
    "context"

    "github.com/myteksi/hystrix-go/hystrix"
)

func tb(ctx context.Context)error{
    return nil
}

func ta(ctx context.Context){
    hystrix.Do("cbName", func()error{
        // At this place, the ctx parameter of function tb,
        // Should I use ctx from ta function, or context.Background()?
        return tb(ctx)
    }, nil)
}


func main(){
    ta(context.Background())
}

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Если вы используете контексты, мне кажется, что вы должны использовать hystrix.DoC. Нет никакой причины использовать что-либо, кроме того, через какой контекст проходили, поскольку Do является синхронным, и вы хотели бы, чтобы любые отмены, крайние сроки (и все, что еще привязано к вашему контексту) были сохранены внутри этого кода.

func ta(ctx context.Context) {
    err := hystrix.DoC(ctx, "cbName", func(ctx context.Context) error {
       ... code that uses ctx here.
    }, nil)
    // handle err, which may be a hystrix error.
}

Трудно сказать, отличается ли это на самом деле от вызова hystrix.Do, но это потенциально позволяет hystrix использовать ваш контекст, добавлять собственные сроки / отмены.

1 голос
/ 22 апреля 2020

Всегда используйте context.Context, поступающий с верхнего уровня, в качестве параметра, где вы можете. Это позволяет сквозному механизму управлять запросом, все, что нужно сделать вызывающей стороне - это отменить или вызвать тайм-аут на начальном ctx, и он будет работать для полного пути запроса.

Переданный начальный контекст может зависеть от вашего требования. Если вы не уверены, какой контекст использовать изначально, context.TODO может быть хорошим вариантом, пока вы не уверены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...