redis
This commit is contained in:
parent
be7bc1ef2c
commit
a328d6feb2
@ -9,6 +9,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
MONGO_HOST: "mongo.develop.sprinthub.ru"
|
MONGO_HOST: "mongo.develop.sprinthub.ru"
|
||||||
MONGO_PASSWORD: $MONGO_PASSWORD_DEV
|
MONGO_PASSWORD: $MONGO_PASSWORD_DEV
|
||||||
|
REDIS_HOST: "redis.develop.sprinthub.ru"
|
||||||
|
REDIS_PASSWORD: $REDIS_PASSWORD_DEV
|
||||||
deploy:
|
deploy:
|
||||||
mode: replicated
|
mode: replicated
|
||||||
restart_policy:
|
restart_policy:
|
||||||
|
@ -9,6 +9,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
MONGO_HOST: "mongo.sprinthub.ru"
|
MONGO_HOST: "mongo.sprinthub.ru"
|
||||||
MONGO_PASSWORD: $MONGO_PASSWORD_PROD
|
MONGO_PASSWORD: $MONGO_PASSWORD_PROD
|
||||||
|
REDIS_HOST: "redis.sprinthub.ru"
|
||||||
|
REDIS_PASSWORD: $REDIS_PASSWORD_PROD
|
||||||
deploy:
|
deploy:
|
||||||
mode: replicated
|
mode: replicated
|
||||||
restart_policy:
|
restart_policy:
|
||||||
|
@ -40,4 +40,5 @@ jobs:
|
|||||||
- name: deploy
|
- name: deploy
|
||||||
env:
|
env:
|
||||||
MONGO_PASSWORD_DEV: ${{ secrets.MONGO_PASSWORD_DEV }}
|
MONGO_PASSWORD_DEV: ${{ secrets.MONGO_PASSWORD_DEV }}
|
||||||
|
REDIS_PASSWORD_DEV: ${{ secrets.REDIS_PASSWORD_DEV }}
|
||||||
run: docker stack deploy --with-registry-auth -c ./.deploy/deploy-dev.yaml infra-development
|
run: docker stack deploy --with-registry-auth -c ./.deploy/deploy-dev.yaml infra-development
|
||||||
|
@ -40,4 +40,5 @@ jobs:
|
|||||||
- name: deploy
|
- name: deploy
|
||||||
env:
|
env:
|
||||||
MONGO_PASSWORD_PROD: ${{ secrets.MONGO_PASSWORD_PROD }}
|
MONGO_PASSWORD_PROD: ${{ secrets.MONGO_PASSWORD_PROD }}
|
||||||
|
REDIS_PASSWORD_PROD: ${{ secrets.REDIS_PASSWORD_PROD }}
|
||||||
run: docker stack deploy --with-registry-auth -c ./.deploy/deploy-prod.yaml infra
|
run: docker stack deploy --with-registry-auth -c ./.deploy/deploy-prod.yaml infra
|
||||||
|
@ -3,6 +3,7 @@ import pydantic
|
|||||||
import typing
|
import typing
|
||||||
|
|
||||||
from app.storage.mongo import tasks
|
from app.storage.mongo import tasks
|
||||||
|
from app.storage.redis import lock
|
||||||
|
|
||||||
|
|
||||||
router = fastapi.APIRouter()
|
router = fastapi.APIRouter()
|
||||||
@ -16,6 +17,7 @@ class Response(pydantic.BaseModel):
|
|||||||
|
|
||||||
@router.get('/api/v1/take', responses={404: {'description': 'Not found'}})
|
@router.get('/api/v1/take', responses={404: {'description': 'Not found'}})
|
||||||
async def execute(queue: typing.Annotated[str, fastapi.Header()]) -> Response:
|
async def execute(queue: typing.Annotated[str, fastapi.Header()]) -> Response:
|
||||||
|
async with lock.acquire(queue):
|
||||||
task = await tasks.take_task(queue)
|
task = await tasks.take_task(queue)
|
||||||
if not task:
|
if not task:
|
||||||
raise fastapi.HTTPException(404)
|
raise fastapi.HTTPException(404)
|
||||||
|
15
app/storage/redis/__init__.py
Normal file
15
app/storage/redis/__init__.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import os
|
||||||
|
import redis.asyncio
|
||||||
|
|
||||||
|
|
||||||
|
REDIS_HOST = os.getenv('REDIS_HOST', 'localhost')
|
||||||
|
REDIS_PASSWORD = os.getenv('REDIS_PASSWORD')
|
||||||
|
if REDIS_PASSWORD:
|
||||||
|
URL = f'redis://:{REDIS_PASSWORD}@{REDIS_HOST}:6379'
|
||||||
|
else:
|
||||||
|
URL = f'redis://{REDIS_HOST}:6379'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pool = redis.asyncio.ConnectionPool.from_url(URL)
|
||||||
|
database = redis.Redis.from_pool(pool)
|
8
app/storage/redis/lock.py
Normal file
8
app/storage/redis/lock.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import contextlib
|
||||||
|
|
||||||
|
from app.storage import redis
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def acquire(lock_name: str):
|
||||||
|
return redis.database.lock(lock_name)
|
Loading…
Reference in New Issue
Block a user