Какую очередь задач следует использовать при использовании RabbitMQ в JAVA?

Итак, я переводил свою кодовую базу с Django на Spring Boot Java. Но перед этим я пытался найти аналогичный фреймворк и библиотеку для каждой функции, которую я реализовал в Django. Одна из вещей, на которой я застрял, это очереди сообщений, В Django я использовал Rabbit MQ как очередь сообщений и Celery как очередь задач для обработки содержимого очереди.

Очередь задач и очередь сообщений. RabbitMQ является "MQ". Он принимает сообщения и отправляет сообщения.

Celery - это очередь задач. Она получает задания с соответствующими данными, выполняет их и доставляет результаты.

В Java я могу использовать RabbitMQ в качестве очереди сообщений, но какой пакет мне нужен для порождения рабочих? Обработки очереди? Что я должен использовать в качестве очереди задач? Как именно это работает в Java?

Вот возможное решение:

from pandas import json_normalize

df = json_normalize(
    dict_,
    record_path=['nested_dicts'],
    meta = ['key1', 'key2', 'key3', 'key4', 'key5']
)
df = df.set_index(['key1', 'key2', 'key3', 'key4', 'key5'])

Здесь я использую функцию json_normalize для сглаживания словаря, а затем устанавливаю индекс в key1-key5.

Вот pandas единственное решение:

import pandas as pd

# Convert dict to dataframe
# https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.from_dict.html
df = pd.DataFrame.from_dict(dict_)

# Explode the nested_dicts column: each item/dict in list is transformed into a new row in the dataframe
# https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.explode.html
df2 = df.explode('nested_dicts', ignore_index=True)

# Assign the nested_dicts dictionaries to a new column for each key 
# while dropping the nested_dicts column from the dataframe
# https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.assign.html
df3 = df2.drop('nested_dicts', 1).assign(**pd.DataFrame(df2.nested_dicts.values.tolist()))

#  Set index
df4 = df3.set_index(df3.columns.tolist())

df4

Основано на ответах Юрия с небольшим автоматическим распознаванием для meta и record_path.

# take the first item to detect meta, record_path
meta, record_path = [], []
for key_j, value_j in dict_[0].items():
    if not isinstance(value_j, list):
        meta.append(key_j)
    else:
        record_path.append(key_j)

# adopted Yury's solution
df = pandas.json_normalize(
    dict_,
    record_path=record_path[:1],
    meta = meta,
)

df.set_index(meta, inplace=True)

Возможно, я неправильно понял проблему, но зачем нужны большие громоздкие библиотеки для этого, если 33 строки кода на python могут сделать все это?

выдает следующий результат:

original data:

[{'key1': 'value1',
  'key2': 'value2',
  'nested_dicts': [{'nested_key1': 'nested_value_1',
                    'nested_key2': 'nested_value_2'},
                   {'nested_key1': 'nested_value_3',
                    'nested_key2': 'nested_value_4'}],
  'some_list_to_keep': ['list_value_1', 'list_value_2'],
  'some_value_to_keep': 'kept_value1'},
 {'key1': 'value1',
  'key2': 'value2',
  'nested_dicts': [{'nested_key1': 'nested_value_5',
                    'nested_key2': 'nested_value_6'},
                   {'nested_key1': 'nested_value_7',
                    'nested_key2': 'nested_value_8'}],
  'some_list_to_keep': ['list_value_3', 'list_value_4'],
  'some_other_list_to_keep': ['list_value_5', 'list_value_6'],
  'some_value_to_keep': 'kept_value2'},
 {'key1': 'value3',
  'key2': 'value4',
  'nested_dicts': [{'nested_key1': 'nested_value_9',
                    'nested_key2': 'nested_value_10'},
                   {'nested_key1': 'nested_value_11',
                    'nested_key2': 'nested_value_12'}],
  'some_other_value_to_keep': 'kept_value3',
  'yet_another_list_to_keep': ['list_value_7', 'list_value_8']}]


flattened and merged data

[{'key1': 'value1',
  'key2': 'value2',
  'nested_key1': ['nested_value_1',
                  'nested_value_3',
                  'nested_value_5',
                  'nested_value_7'],
  'nested_key2': ['nested_value_2',
                  'nested_value_4',
                  'nested_value_6',
                  'nested_value_8'],
  'some_list_to_keep': [['list_value_1', 'list_value_2'],
                        ['list_value_3', 'list_value_4']],
  'some_other_list_to_keep': [['list_value_5', 'list_value_6']],
  'some_value_to_keep': ['kept_value1', 'kept_value2']},
 {'key1': 'value3',
  'key2': 'value4',
  'nested_key1': ['nested_value_9', 'nested_value_11'],
  'nested_key2': ['nested_value_10', 'nested_value_12'],
  'some_other_value_to_keep': ['kept_value3'],
  'yet_another_list_to_keep': [['list_value_7', 'list_value_8']]}]
Вернуться на верх