![]() |
#1 |
Участник
|
goshoom: Recurring Integrations Scheduler
Источник: http://dev.goshoom.net/en/2017/09/re...ons-scheduler/
============== You may have heard about QuartzAX, an application for file-based integration with AX 7 (Dynamics 365 for Finance and Operations, Enterprise Edition). Microsoft announced at the last Technical conference that it would be released in a few days, but it didn’t happen and it looked like it wouldn’t ever be made available. But it has changed today. You can find its source code and documentation on GitHub under the new name: Recurring Integrations Scheduler. Источник: http://dev.goshoom.net/en/2017/09/re...ons-scheduler/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
![]() |
#2 |
Участник
|
На яммере данную вещь встретили крайне восторженно, но удивляет почему
Вкратце – ребята написали сервис на C#(с собственным планировщиком) который занимается по сути импортом-экспортом файлов из директорий(Inbound, Outbound, Processing, Success, Error), подключаясь к АХ через OData. Т.е. сама задача по сути типичная возникает на каждом втором проекте. Удивляет архитектура решения – "отдельный . NET сервис" Т.е. обычно она решалась созданием пакетного задания(ий) в АХ и реализации работы с файлами. Т.е. тут можно было сделать аналогично тем же пакетным заданием, который бы обращался к Azure storage с созданными папками(Azure storage можно замапить как локальный диск в windows, собственно для приложения с которым интегрируемся это будет прозрачно) Есть у кого-нибудь идеи преимущества подобной архитектуры перед пакетными заданиями? Т.е. у меня сходу только недостатки: отдельный сервис который нужно администрировать (т.е. отдельное расписание, ошибки нужно будет смотреть в 2 местах), 2 системы – непонятно как реализовывать DR, усложненный мониторинг и т.п. |
|
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Moderator
|
Если очень большая рекативность решения не нужна (то есть - задержки в пределах 15-30 минут никого не пугают), то в файлах ничего плохого нету. В случае чего их легко просмотреть в редакторе, подправить данные (если например предудущий пример уже сработал и надо просто сделать то же самое со следующим заказом/журналом и тп). Таким образом - легкость отладки на порядок выше чем при использовании web-service или Azure AppBus какой-нить. Надежность, на самом деле, тоже не так уж плоха. Я, например, видел внедрение, где разработанная где-то во второй половине 90ых система (на C++ Builder кажется), достаточно устойчиво обменивалась файлами с разработанной в середине 80ых системой на AS 400. То есть - в конечном итоге и то и другое было частично заменено на Аксапту, а частично на какой-то CAD/MES. Но сам факт того что файловая интеграция благополучно проработала 20 лет наводит на мысли...
|
|
![]() |
#5 |
Banned
|
Цитата:
Сообщение от trud
![]() На яммере данную вещь встретили крайне восторженно, но удивляет почему
Вкратце – ребята написали сервис на C#(с собственным планировщиком) который занимается по сути импортом-экспортом файлов из директорий(Inbound, Outbound, Processing, Success, Error), подключаясь к АХ через OData. Т.е. сама задача по сути типичная возникает на каждом втором проекте. Удивляет архитектура решения – "отдельный . NET сервис" Т.е. обычно она решалась созданием пакетного задания(ий) в АХ и реализации работы с файлами. Т.е. тут можно было сделать аналогично тем же пакетным заданием, который бы обращался к Azure storage с созданными папками(Azure storage можно замапить как локальный диск в windows, собственно для приложения с которым интегрируемся это будет прозрачно) Есть у кого-нибудь идеи преимущества подобной архитектуры перед пакетными заданиями? Т.е. у меня сходу только недостатки: отдельный сервис который нужно администрировать (т.е. отдельное расписание, ошибки нужно будет смотреть в 2 местах), 2 системы – непонятно как реализовывать DR, усложненный мониторинг и т.п. Обратите внимание, что задание типа Recurring integration в модуле Data management (DIXF) не открывает папку Azure, а вывешивает отдельный endpoint, в который сторонняя программа за-push-ивает файл в конверте. После этого файл кладется в очередь и разбирается процессом Recurring integration. Т.е. пакетное задание для чтения папки Azure пришлось бы писать самому, а это затратно и не кошерно. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#6 |
Участник
|
Цитата:
Цитата:
А в чем легкость по сравнению с любой программной очередью, к примеру Azure Queue ? Одно приложение кладёт сообщение в очередь, другое достает. Хотите подебажить - положите сообщение еще раз. Плюсы для меня: не надо писать экспорт данных в файл, не надо хранить файлы, не надо администрировать доступ к файлам и т.д. и т.п. Последний раз редактировалось skuull; 29.09.2017 в 04:56. |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от skuull
![]() А в чем легкость по сравнению с любой программной очередью, к примеру Azure Queue ? Одно приложение кладёт сообщение в очередь, другое достает. Хотите подебажить - положите сообщение еще раз. Плюсы для меня: не надо писать экспорт данных в файл, не надо хранить файлы, не надо администрировать доступ к файлам и т.д. и т.п.
Последний раз редактировалось trud; 29.09.2017 в 07:15. |
|
![]() |
#8 |
NavAx
|
Цитата:
По скриншотам QuartzAX не понятно как настроить, если надо обмениватся разными типами данных (клиенты, поставщики, заказы и т.д.), надо для каждого типа свой инстанс настраивать/запускать или все можео настроить в одном? ЗЫ. На чистом .Net только один статический метод для чтения body из сообщения в Azure Service Bus. Последний раз редактировалось raz; 29.09.2017 в 09:37. |
|
![]() |
#9 |
Moderator
|
Цитата:
Это я к тому, что любые рассуждения о прогрессе неплохо бы сопровождать хотя бы примерными обоснованиями финансовой эффективности. Цитата:
Во вторых - далеко не всегда в Enterprise реалиях количество документов исчисляется тысячами и миллионами. Если у нас интеграция, например, с внешним рассчетом зарплаты, то там документ только один в месяц - итоговый платежный табель. Вообще когда говорится о миллионах сообщений, возникает ощущение что речь идет о каком-то серьезном архитектурном просчете. Наверное, можно таких размеров обмена достичь, если попытаться написать внутри Аксапты свою MES и собирать в нее данные с датчиков. Но все-таки правильнее держать MES где-то во внешнем приложении, а в аксапту ежедневно импортировать данные о нескольких сотнях активных производственных заказах и их потреблении/выпуске. А это - задача вполне посильная файловому обмену. Цитата:
Сообщение от skuull
![]() А в чем легкость по сравнению с любой программной очередью, к примеру Azure Queue ? Одно приложение кладёт сообщение в очередь, другое достает. Хотите подебажить - положите сообщение еще раз. Плюсы для меня: не надо писать экспорт данных в файл, не надо хранить файлы, не надо администрировать доступ к файлам и т.д. и т.п.
В принципе - я согласен что при использовании стандартных Message Queue экономится немного времени на огранизацию очередей, логирования и тп. Но на аксапте это порядка 3-4 экранов кода - экономия не гигантская. Формировать XML или JSON тебе все равно надо в обоих случаях - и при очереди и при примитивной папочке на диске. Единственное реальное преимущество Message Queue (причем гигантское) - это их интеграция с менеджерами транзакций. То есть - можно гарантировать, что сообщения пропадут из очереди ТОЛЬКО при успешном завершении текущей транзакции. (Чего при файловом доступе добится нельзя ни при каких условиях). Однако, Аксапта не поддерживает работу с менеджерами транзакций и преимущество это может сработать только при разработке на голом C#/Java Последний раз редактировалось fed; 29.09.2017 в 11:14. |
|
|
За это сообщение автора поблагодарили: EVGL (2), Link (2). |
![]() |
#10 |
Участник
|
Если обратить свой взор на DMFIntegrationBridge то можно найти использование разных интересных библиотек типа Microsoft.Dynamics.Platform.Integration.*, а дальше рефлектор в руки и смотрите как используеться и блоб и очереди и прочие прелести Azure.
|
|
![]() |
#11 |
Banned
|
Все в одном. Один процесс контролирует множественные задания.
|
|
![]() |
#12 |
Участник
|
Цитата:
Цитата:
Давайте уйдем от полемики. Кроме возможности прочитать и подправить руками есть еще преимущества? |
|
![]() |
#13 |
Moderator
|
Цитата:
А насчет полемики - так нету плохих и хороших технологий. Есть технологии применимые для каждого конкретного случая с конкретными параметрами. Я просто пытаюсь представить себе ситуацию на реальном, более или менее разумно спроектированном внедрении Аксапты, при котором файловый обмен дествительно начинает несправляться. Но реального примера у меня придумать не получается. Ситуации с датчиками в производстве или с закачкой всех ритейловых заказов в аксапту - это как раз примеры скверной архитектуры. Кроме возможности подправить и прочитать, замечу большую легкость администрирования. Расшарить папочку на компе любой пользователь может, а администрировать message queue - это надо учиться. Наконец - хотя написание кода для записи/чтения XML/JSON и занимает время, но текстовый формат обмена легче согласовать между поставщиками, легче верифицировать и тд. То есть - речь идет не только о времени на кодинг, но и о времени на дизайн. То есть - на мой взгляд - message queue и Enterprise Service Bus - это вещи вполне полезные, но только в том случае, если внедряется не ERP, а best of breed. Вот если у нас CRM, складская система, финансовая система, система бюджетирования, APS, MES, Business Intellignce, система прогнозирования спроса и тд взяты от разных разработчиков и живут частично в облаке, частично on-premise, то использование MQ и ESB вполне оправдано. (просто потому что объем обмена внутри этого хозяйства просто непосилен для файлового обмена). А если нам надо ERP заинтегрировать с 3-4-5 внешними системами, то в большинстве случаев, использование тяжелых интеграционных технологий - это стрельба из пушки по воробьям. Последний раз редактировалось fed; 29.09.2017 в 11:13. |
|
![]() |
#14 |
Участник
|
Ну т.е. если у вас обычное пакетное задание, читает что-то(в принципе то неважно что, очередь azure или директорию с файлами) и обрабатывает
мне это кажется логичным, но вот EVGL такой подход считает "некошерным" (аналогично кстати отозвались на яммере, используя правда терминологию "не энтерпрайс подход" ![]() собственно в этом и вопрос - зачем для такой задачи нужно отдельное приложение-сервис, с собственным планировщиком и т.п. |
|
![]() |
#15 |
Участник
|
Цитата:
вендору понятно зачем - микросервисы, разделение по командам, независимое планирование/тестирование/приемка, независимое ценообразование. масса преимуществ для вендора. |
|
![]() |
#16 |
NavAx
|
Идея такая.
1. Есть Interface - связь с DMF проектом и dataentity. 2. Есть Shared resource - связь с тем, где брать/куда класть файлы с данными. 3. Есть звязка между Interface и Shared resource. 4. Есть Interface log, промежуточная таблица, куда попадают данные для экспорта/импорта. Данные - это файлы сгенерированные DMF или для DMF. 5. Обработчик (пакетник) для обработки Shared resource, при запуске нужно указать какой ресурс. Сколько интерфейсов нужно мониторить, столько пактеных заданий запускаем. Для входящих интерфейсов файлы будут браться с ресурса и класться в Interface log со статусом Pending import. Для исходящих данных из Interface log будут браться строки с Pending export и отправляться на/в ресурс. 6. Обработчик для Pending import. Нужно одно пакетное задание. 7. Для экспорта нужны или триггеры, или можно натроить Auto push для dataentity с Incremental push only. Данные попадают в Interface log со статусом Pending export. 8. Обработчик для Pending import. Нужно одно пакетное задание. 9. Обработчик для Auto push интерфейсов. |
|
|
|