Dapr и использование хранилища состояний sql вместо redis

#dapr

#dapr

Вопрос:

Мы хотели бы протестировать переключение с redis на компонент хранилища состояний sql.

Из документов похоже, что мы можем сделать это с двумя небольшими изменениями:

 apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
spec:
  type: state.sqlserver  # Switch from redis
  version: v1
  metadata:
  - name: connectionString
    value: Server=db;Database=dapr;user id=sa;Password=Your_password123;
  - name: tableName
    value: dapr  
 

И в наш файл docker compose мы добавили sql server

   db: # added 
    image: "mcr.microsoft.com/mssql/server"
    ports:
      - "1433:1433"
    environment:
      SA_PASSWORD: "Your_password123"
      ACCEPT_EULA: "Y"
    networks:
      - smi-network
 

Я предположил, что в базе данных dapr будет создана новая таблица с именем dapr. Но вместо этого мы получаем следующую ошибку:

 level=warning msg="error initializing state store statestore (state.sqlserver/v1): failed to create db schema: Unable to open tcp connection with host 'db:1433': dial tcp 172.29.0.2:1433: connect: connection refused" app_id=daprbackend 
 

Что я пропустил, я предположил, что, поскольку все они находятся в одной сети smi-network , база данных будет вызываться db (если я войду в оболочку db , я увижу, что IP-адрес тот же 172.29.0.2 )?

Комментарии:

1. Внезапно он начал работать. Возможно, это связано с тем, что мы переключились на master db

Ответ №1:

Глядя на код, база данных создается не для вас. Только таблица. Поэтому, если ваша строка подключения включает базу данных, вы должны сначала создать ее.

Если вы не включите базу данных в строку подключения master , база данных будет использоваться, и там будет создана таблица.

Сейчас я отправляю запрос на извлечение, чтобы исправить это. Если используемый вами логин имеет разрешения, база данных будет создана для вас.