Upload
vitebsk-miniq
View
247
Download
3
Embed Size (px)
Citation preview
Who is who
• Денис
• EPAM Systems
• Ведущий JEE-разработчик
Agenda
• Архитектура «Producer/Consumer»
• Публикация данных
• Publishing Tool
• Dead message workflow
Потому что зоопарк
• Зоопарк источников данных
• Зоопарк хранилищ данных
• Независимые наборы данных
• Распределенная инфраструктура
• Различные сценарии работы
Publishing System
Архитектура «Producer/Consumer»
PRODUCER CONSUMER
220
Используемые технологии
• JMS
• Apache Camel
• Apache ActiveMQ
• Apache Thrift
1
Пересылать сообщениена конкретные
окружение/датасет/хранилище
Проблема
RegionCoherence
RegionOracle
PROD-1
VehicleCoherence
VehicleHBase
InventorySolr
InventoryOracle
DealerSolr
DealerOracle
RegionCoherence
RegionOracle
QA-1
VehicleCoherence
VehicleHBase
InventorySolr
InventoryOracle
DealerSolr
DealerOracle
JMS
Topic
Queue
PRODUCER TOPIC
CONSUMER #1
CONSUMER #2
CONSUMER #3
{M1, M2, M3}
{M1, M2, M3}M1
M1
M1
{M1, M2, M3}
{M1, M2, M3}
QUEUEPRODUCER
CONSUMER #1
CONSUMER #2
CONSUMER #3
{M1, M2, M3}
M1
M2
M3
M1
M2
M3
2 Проблема
PRODUCER
CONSUMER
CONSUMER
PRODUCER
CONSUMER
CONSUMER
CONSUMER
2 Проблема
?
PRODUCER
CONSUMER
CONSUMER
CONSUMER
2 Решение
?
PRODUCER
CONSUMER
CONSUMER
CONSUMER
2 Решение
?
TOPIC
QUEUE
QUEUE
QUEUE
PRODUCER
CONSUMER
CONSUMER
CONSUMER
VIRTUAL TOPIC
3 Проблема
TOPIC
QUEUE
QUEUE
QUEUE
PRODUCER
VIRTUAL TOPIC
OK
FAIL
FAIL CONSUMER 1
CONSUMER 2
CONSUMER 3
3 Решение
TOPIC
QUEUE
QUEUE
QUEUE
PRODUCER
VIRTUAL TOPIC
OK
CONSUMER 1
CONSUMER 2
CONSUMER 3
DestinationInterceptor
4 Проблемаvoid doMagic(); void doNothing(); int return42();
MESSAGE
?
3
Apache Camel+
Thrift
Решение
RECEIVERSERVICE void doMagic();
void doNothing();
int return42();
CAMEL ROUTE
executeThrift();
THRIFTBODY
JMS message
THRIFT PROCESSOR
THRIFT PROCESSOR
void doMagic();
void doNothing();
int return42();
THRIFT PROCESSOR
findProcessorProcessFunc
ProcessFunc
ProcessFunc
CONSUMER
CONSUMER
Apache Thrift
Apache Thrift
namespace java com.example.counter.thrift.gen
service CounterService {
oneway void increment(1:i32 value)
}
Содержимое файла example.thrift:
Producer/Consumer
// Producer
CounterService.Client client
= new CounterService.Client(sender.getProtocol());
client.increment(1);
// Consumer
@Component("counterConsumer")
public class CounterConsumer extends AbstractDataHandler
implements CounterService.Iface {
@Override
public void increment(int value) {
// perform your business logic here
}
}
Publishing Tool(Shasta)
Dead message workflow
А если «что-то не так»?
1) Dead queue на брокере
2) Dead-message-consumer
3) MongoDB
4) Dead-message-producer
Итого
15 окружений
44 уникальных наборов данных
73 консьюмера
#
#
#