#python #salesforce #apex
#python #salesforce #apex
Вопрос:
В Salesforce мы запускаем событие платформы и добавляем полезную нагрузку в поле Payload__c (LongText) к этому событию платформы.
Мы создали потоковый клиент на python, который подписывается на это событие платформы и использует полезную нагрузку.
Поскольку иногда полезная нагрузка довольно большая, нам пришла в голову идея сжимать на стороне salesforce и распаковывать полезную нагрузку на стороне python.
Мы нашли библиотеку https://github.com/bilalfastian/LZ4String для Апекса. Итак, что мы сейчас делаем, это сжимаем полезную нагрузку с помощью метода: compressstobase64(полезная нагрузка) и сохраняем ее как base64 в событии платформы.
В python мы пробовали по-разному, но мы не смогли распаковать. Пример с библиотекой https://github.com/eduardtomasek/lz-string-python:
В Apex:
String test = 'Hello world';
String comp = LZString.compressToBase64 (test);
System.debug(comp);
// Output is 0oXjgLbmg7ZA7rqQ4pyw04gA
Теперь я пытаюсь распаковать эту строку в python:
base64_message = '0oXjgLbmg7ZA7rqQ4pyw04gA'
w=x.decompresFromBase64(base64_message)
logger.error(w)
Output is just: -
Комментарии:
1. Вы проводили тесты, чтобы подтвердить, что сжатие добавляет здесь какую-либо ценность? Обратите внимание, что ваш пример base64 потребляет больше байтов, чем фактическое сообщение. Вы также потеряете производительность, пытаясь выполнять побитовые манипуляции в Apex, что очень плохо подходит для этой задачи.
2. Привет, Дэвид, да, мы это сделали. Было примерно на 50% меньше данных