优化结构
This commit is contained in:
@@ -72,6 +72,51 @@ func storeConfig(store *runtimeconfig.Store, provider string) runtimeconfig.Conf
|
||||
return config
|
||||
}
|
||||
|
||||
// TestConfig creates a short-lived provider client and closes it immediately.
|
||||
// For RabbitMQ this also checks the configured exchange and queue topology.
|
||||
func TestConfig(ctx context.Context, provider string, raw json.RawMessage) error {
|
||||
if ctx != nil {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
default:
|
||||
}
|
||||
}
|
||||
provider = strings.ToLower(strings.TrimSpace(provider))
|
||||
if provider == ProviderEMQX {
|
||||
values := map[string]any{}
|
||||
if err := json.Unmarshal(raw, &values); err != nil {
|
||||
return fmt.Errorf("decode %s configuration: %w", provider, err)
|
||||
}
|
||||
baseID := configText(values, "client_id")
|
||||
values["client_id"] = fmt.Sprintf("%s-test-%d", baseID, time.Now().UnixNano())
|
||||
encoded, err := json.Marshal(values)
|
||||
if err != nil {
|
||||
return fmt.Errorf("encode %s test configuration: %w", provider, err)
|
||||
}
|
||||
raw = encoded
|
||||
}
|
||||
client, err := newProviderClient(provider, raw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if client == nil || !client.Connected() {
|
||||
if client != nil {
|
||||
_ = client.Close()
|
||||
}
|
||||
return platformmq.ErrUnavailable
|
||||
}
|
||||
closeErr := client.Close()
|
||||
if ctx != nil {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
default:
|
||||
}
|
||||
}
|
||||
return closeErr
|
||||
}
|
||||
|
||||
func (r *Reloadable) apply(provider string, config runtimeconfig.Config) {
|
||||
r.opMu.Lock()
|
||||
defer r.opMu.Unlock()
|
||||
|
||||
Reference in New Issue
Block a user