SlideShare a Scribd company logo
1 of 67
Download to read offline
Enterprise	Messaging	Foundations
Jeremy	Deane	
http://jeremydeane.net
Agenda
v Environment	Setup
v Asynchronous	Hello	World!
v Messaging	Foundations
v Exercises
v Messaging	Networks
v Advanced	Messaging
v Extensible	Messaging
v Exercises
Environment	Setup
§ JDK	1.8+	Pre-Requisite	($JAVA_HOME	in	path)
§ Maven	3.3.3+	Pre-Requisite	($MAVEN_HOME	in	path)
§ Download	and	unzip	ActiveMQ – Version	5.14.0+
§ Download	hawtio – Version:1.4.56+
§ rename	hawtio-app.jar
§ Download	(Clone)	Code	From	Github
§ https://github.com/jtdeane/magic-supplies
§ https://github.com/jtdeane/message-client
§ https://github.com/jtdeane/docker-message-client
§ https://github.com/jtdeane/camel-standalone-router
§ Windows	Install	ActiveMQ as	Service:	
./$ACTIVEMQ_HOME/win65/InstallService.bat
Docker Commands: ../docker-message-client/Enterprise Messaging Fundamentals Commands
Non-Docker Commands: ../message-client/Enterprise Messaging Fundamentals Commands
Docker	– Portainer Setup
1. Create	Volume
2. Start	Portainer (no	–v	arg /var..sock	for	windows)
3. View	Portainer (change	admin	password	first	time)
docker volume create portainer_data
docker run -d -p 9898:9000 -v /var/run/docker.sock:/var/run/docker.sock
-v portainer_data:/data portainer/portainer
http://localhost:9898/#/auth
Asynchronous	Hello	World!
1. Start	ActiveMQ
2. Build	Magic	Supplies	Project	
3. Optional import	into	IDE
4. Execute	Message	Producer	– Run	as	JUnit Test	
5. View	ActiveMQ Console
6. Execute	Message	Consumer	– Run	as	JUnit Test
cd $ACTIVEMQ_HOME/bin
./activemq start OR ./activemq.bat
cd magic-supplies
mvn clean install
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
mvn test -Dtest=JMSProducerFunctionalTest
mvn test -Dtest=JMSConsumerFunctionalTest
ActiveMQ Web	Console	Alternative: hawtio
1. Start	hawtio
2. Open	in	Web	Browser
3. Select	ConnectàLocal
4. Connect	to	ActiveMQ
5. Click	new	Agent	URL	to	launch	browsing
6. Select	ActiveMQ
java -jar hawtio-app.jar --port 8090
http://localhost:8090/hawtio
ActiveMQ Message Broker
<execution environment>
Spring-Boot Application
<execution environment>
REST
Controller
Message
Listener
TopicQueue
Magic	Supplies	Application
§ Spring	Boot	Web	Application
§ Spring	Boot	1.4.0
§ JMS	Listeners	- ActiveMQ
Magic	Supplies	Web Services
1. Start	ActiveMQ *
2. Start	Web	Application
3. Open	Browser
4. View	Health	Check	Response
*	Web	Application	requires	ActiveMQ started
cd $ACTIVEMQ_HOME/bin
./activemq start OR ./activemq.bat
mvn spring-boot:run -Drun.arguments="-Xmx256m,-Xms128m”
OR
cd magic-supplies/target
java -jar magic-supplies-1.0.0.jar
http://localhost:8080/info
{"build":{"description":"Magic Supplies	Web	Application","name":"Magic Supplies	Web	
Appication","version":"1.0.0","artifact":"magic-supplies"}}
Magic	Supplies	Web Services	- Docker
1. Update	Docker	Compose
2. Build	&	Start	Docker	Compose
3. View	Health	Check	Response
4. Displayed
Also	starts	ActiveMQ (http://localhost:8161/admin/)		&	Hawtio (http://localhost:8090/hawtio)
#replace magic supplies build
build: .
#with magic supplies image
image: jtdeane/magic-supplies:latest
docker-compose up
http://localhost:8080/info
{"build":{"description":"Magic Supplies	Web	Application","name":"Magic Supplies	Web	
Appication","version":"1.0.0","artifact":"magic-supplies"}}
Hawtio connect	to	ActiveMQ - Docker
1. Open	in	Browser
2. Connect	Remote to	ActiveMQ (admin/admin)
3. View	Queues
http://localhost:8090/hawtio
P2P	Hidden Costs
Bottom	Line	SOA
by	Marc	Rix
Web	services
A	web	service	does	NOT truly	decouple	the	
consumer	and	provider
P2P	Integrations
The	cost	of	maintaining	P2P	integrations	increases	
exponentially	as	the	number	of	the	connections	
increases
#	of	connections
$
gain
value
cost
loss
Messaging	Foundations
Enterprise Integration	Patterns*
*	A.K.A. Message	Exchange	Patterns	(MEP)
Publish Subscribe Domain (Topics)
Point-to-Point Domain (Queues)
Enterprise Integration	Patterns
Channel Message
FIlter
SquareTriangle ChannelSquare SquareSquare
Guaranteed	Message	Delivery
Filter	Messages
Asynchronous	Request	Reply
Message Oriented	Architecture	(MOA)
MessageSender Receiver
Broker
TopicQueue
creates
processe
s
Delivers
Connects/to Connects/to
Hosted//by
Java	Message	Service	(JMS)*
*	Alternative	– Advanced	Message	Queuing	Protocol	(AMQP)
Message
JMS & Custom Properties
Payload
Properties	(a.k.a.	Headers)
§ JMS*	(e.g.	JMSType,	JMSCorrelationID,	
JMSDeliveryMode,	JMSExpiration)
§ Custom	(e.g.	MimeType,	Token)
Payload	(a.k.a.	Body)
§ Text
§ Object
§ Map
§ Bytes
§ Stream
Java	Message	Service	(JMS)
Producer
Publisher
Message Broker
<JMS Providert>
Topic
Queue
Subscriber
Consumer
<Listener>
Subscriber
Message Store
JMS
Selector
Channel
Channel
Apache	ActiveMQ
Integration	Options
Java	Message	Service	(JMS)	
Advanced	Message	Queuing	Protocol	(AMQP)
Deployment	Flexibility
Stand-alone
Embedded
Advanced	Topologies
Master-Slave	High	Availability	(HA)
Federated	Network
Support
Active	Open	Source	Community
Commercial	24X7	Options
Languages	- Transport
• Java-Scala	– TCP/NIO
• Ruby,	Perl,	Python	– Stomp
• C#	(NMS)	–TCP/NIO
Messaging	Exercises
Exercise:	JMS	Sender
1. Start	ActiveMQ
2. Build	Client
3. Execute	JAR
4. View	Message	from	ActiveMQ or	hawtio (test.alchemy)
java -jar message-client-1.0.0.jar
mvn clean install
cd target
cd $ACTIVEMQ_HOME/bin
./activemq start OR ./activemq.bat
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
Spring Application
<execution environment>
ActiveMQ Standalone Broker
<execution environment>
Alchemy
Queue
Message
Sender
Channel
message-client/src/main/java/cogito/online/application/MessageClient:sendAlchemyAlert(..)
Exercise:	JMS	Sender	- Docker
1. Start	Docker	Message	Client
2. Execute	client
3. View	Message	from	ActiveMQ or	hawtio (test.alchemy)
http://localhost:9999/message/test
Stop existing Docker-Compose Magic Supplies
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
Spring Application
<execution environment>
ActiveMQ Standalone Broker
<execution environment>
Alchemy
Queue
Message
Sender
Channel
docker-message-client/src/main/java/ws/cogito/test/Application:sendAlchemyAlert(..)
#replace Docker Message Client build
build: .
#with Docker Message Client image
image: jtdeane/docker-message-client:latest
docker-compose up
Demo:	JMS	Listeners
magic-supplies/src/main/java/cogito/online/application/MagicSuppliesConfiguration
magic-supplies/src/main/java/cogito/online/messaging/SingleOrderProcessingMessageListener
magic-supplies/src/main/java/cogito/online/messaging/OrderProcessingMessageListener
Srping-Boot Application
<execution environment>
Message
Listener
Configuration
Producer
<Message Client>
Message Broker
<JMS Providert>
Queue
Message Store
Channel
Exercise:	JMS	Listener
1. Start	ActiveMQ
2. Start	Web	Application
3. Execute	JAR
4. View	Activity	via	ActiveMQ or	hawtio
5. View	Magic-Supplies	Console	Log
java -jar message-client-1.0.0.jar magic.order
java -jar message-client-1.0.0.jar magic.orders
cd $ACTIVEMQ_HOME/bin
./activemq start OR ./activemq.bat
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
cd magic-supplies/target
java -jar magic-supplies-1.0.0.jar
Exercise:	JMS	Listener	- Docker
1. Start	Docker	Message	Client	Supplies
2. Execute	client
3. View	Message	from	ActiveMQ or	hawtio (test.alchemy)
4. View	Magic-Supplies	Console	Log
http://localhost:9999/message/magic.order
http://localhost:9999/message/magic.orders
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
Stop existing Docker-Compose Magic Supplies (if up)
#replace Docker Message Client build
build: .
#with Docker Message Client image
image: jtdeane/docker-message-client:latest
docker-compose up
Demo:	JMS	Subscribers
magic-supplies/src/main/java/cogito/online/application/MagicSuppliesConfiguration
magic-supplies/src/main/java/cogito/online/messaging/AlertProcessingTopicListener.java
Srping-Boot Application
<execution environment>
Message
Subscriber
Configuration
Producer
<Message Client>
Message Broker
<JMS Providert>
Topic
Channel
Exercise:	JMS	Subscribers
1. Start	ActiveMQ
2. Start	Magic	Supplies
3. Execute	JAR
4. View	Activity	via	ActiveMQ (or	hawtio)
5. View	Magic-Supplies	Console	Logs
java -jar message-client-1.0.0.jar magic.alerts
cd $ACTIVEMQ_HOME/bin
./activemq start OR ./activemq.bat
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/topics.jsp
cd magic-supplies/target
java -jar magic-supplies-1.0.0.jar
Exercise:	JMS	Listener	- Subscribers
1. Start	Magic	Supplies
2. Execute	client
3. View	Message	from	ActiveMQ or	Hawtio
4. View	Magic-Supplies	Console	Logs
http://localhost:9999/message/magic.alerts
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/topics.jsp
Stop existing Docker-Compose Magic Supplies (if up)
#replace Docker Message Client build
build: .
#with Docker Message Client image
image: jtdeane/docker-message-client:latest
docker-compose up
Messaging	Networks
ActiveMQ Broker Topologies
ActiveMQ	in	Action by	Bruce	Snyder,	
Dejan Bosanac,	and	Rob	Davies
§ Embedded	Broker	(VM	Transport)
§ Standalone	Broker	(a.k.a.	Client-Server)
§ Load	Balanced	Brokers
§ Networked	Brokers	(a.k.a.	Store	and	Forward)
failover:(tcp://BrokerA:61616,tcp://BrokerC:61616)?
randomize=true
ActiveMQ High	Availability	and	Disaster	Recovery
ActiveMQ	in	Action by	Bruce	Snyder,	
Dejan Bosanac,	and	Rob	Davies
§ Master	Slave	– File	System
§ KahaDB
§ SAN-NFS4
§ Master	Slave	– JDBC
§ RDBMS	(e.g.	PostgreSQL)
§ Master	Slave		– Replicated
§LevelDB &	Zookeeper
§ Failover	Protocol	(use	domain	aliases)
failover:(tcp://PrimaryBroker:61616,tcp://SecondaryBroker:61616)?randomize=false
ActiveMQ High	Availability	Example
failover:(tcp://PrimaryBroker:61616,tcp://SecondaryBroker:61616)?randomize=false
Linux VM
Queue
<Execution Environment>
ActiveMQ (Master)
Topic
Linux VM
Queue
<Execution Environment>
ActiveMQ (Slave)
Topic
<NFS Mount>
Kaha DB
ActiveMQ Simple	High	Availability	Demo
1. Create	the	following	directory	structure
2. Unpack	ActiveMQ twice	renaming	to	master	and	slave
3. Update	Master	../conf/activemq.xml:	Name,	Management,	
Persistence,	and	Network	Configurations
../cluster
../cluster/data
../cluster/master
../cluster/slave
<!-- update -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="master"
dataDirectory="${activemq.data}”>
<!-- update -->
<managementContext>
<managementContext createConnector="true" connectorPort="1099"/>
</managementContext>
<!-- update -->
<persistenceAdapter>
<kahaDB directory="<<your location>>"/cluster/data"/>
</persistenceAdapter>
<!-- add-->
<networkConnectors>
<networkConnector uri="static:(tcp://localhost:61617)"/>
</networkConnectors>
ActiveMQ High	Availability	Demo
4. Update	Slave	../conf/activemq.xml:	Name,	Management,	
Persistence,	Network,	Transport	Configurations
5. Update	Slave	../conf/jetty.xml:	jettyPort
<!-- update -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="slave"
dataDirectory="${activemq.data}">
<!-- update à
<managementContext>
<managementContext createConnector="true" connectorPort="2099"/>
</managementContext>
<!-- update à
<persistenceAdapter>
<kahaDB directory="<<your location>>"/cluster/data"/>
</persistenceAdapter>
<!-- add-->
<networkConnectors>
<networkConnector uri="static:(tcp://localhost:61616)"/>
</networkConnectors>
<!– update – also remove other transports à
<transportConnector name="openwire"
uri="tcp://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSiz
e=104857600"/>
<property name="port" value="8162"/>
ActiveMQ High	Availability	Demo
6. Start	the	Master	and	then	the	Slave	Broker
7. Open	Master	Web	Console	– Queues	Page	
8. Create	a	Queue	and	Send	a	Message
9. Stop	the	Master	Broker
10. Open	Slave	Web	Console	– Queues	Page
11. View	the	Queue	and	persisted	Message
cd ../cluster/<<master || slave>>/bin
./activemq start OR ./activemq.bat
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
Open http://localhost:8162/admin/ {admin/admin}
Open http://localhost:8162/admin/queues.jsp
cd ../cluster/<<master || slave>>/bin
./activemq stop OR Ctrl+C
ActiveMQ Federated	Topology	Example
Linux VM
Queue
<Execution Environment>
ActiveMQ (Master)
Topic
Linux VM
Queue
<Execution Environment>
ActiveMQ (Slave)
Topic
<NFS Mount>
Kaha DB
Linux VM
Queue
<Execution Environment>
ActiveMQ (Master)
Topic
Linux VM
Queue
<Execution Environment>
ActiveMQ (Slave)
Topic
<NFS Mount>
Kaha DB
Linux VM
Queue
<Execution Environment>
ActiveMQ (Master)
Topic
Linux VM
Queue
<Execution Environment>
ActiveMQ (Slave)
Topic
<NFS Mount>
Kaha DB
Web	Network	Segment
Service	Network	Segment
Data	Network	Segment
ActiveMQ Error	Handling
§ Dead	Letter	Queue	(DLQ)
§ Review	(Web	Console)
§ Redeliver	(Plug-in)
§ Remediate	(Policy)
§ Monitor	DLQ	Depth
§ Alerts	(Splunk Example)
§ Failed	Message	Transactions
§ Rollback
§ DLQ
§ Throw	or	Log	Exception
ActiveMQ Security
§ Authentication	and	Authorization	
§ Web	Console
§ JMX	Connector	(Bind	to	specific	Port	#)
§ Queues	and	Topics
§ Auditing
§ Monitor	Logs
§ Periodically	Audit	Access
§ Confidentiality
§ Transport	(SSL)
§ Messages	(Encryption)
§ KahaDB Files	(Encryption)
§ Log	Files	(Encryption)
Advanced	Messaging
Apache	Camel	– Enterprise	Integration	Library
Camel	In	Action by	Claus	Ibsen	and	Jonathan	Anstey
§ Domain	Specific	Languages	(DSL)	– Java,	Scala,	Spring	DSL
§ Route	Builders	– create	Endpoints	(i.e.	from	&	to)	using	
Components	(e.g.	protocol)	and	Processors	(e.g.	Mediation,	
Enrichment
§ Route	Engine	– Loads	and	executes	Routes
Apache	Camel	Message
JMS
JMS & Custom Properties
Payload
Camel (IN)
Camel Headers
Body
Camel (OUT)
Camel Headers
Body
HTTP Request
HTTP Headers
Body
Apache	Camel	Route	Processing
/*
* Splitter - xpath expression
*/
from("activemq:emagic.orders").
split(splitXPath).
parallelProcessing().
to("activemq:emagic.order");
Camel Route Engine
Camel Route
<JMS Component>
Endpoint (From)
<EIP Processor>
Some Processing
<DB Component>
Endpoint (To)
Camel
Message
Configurations
/*
* Content Based Routing - Inpatient-Outpatient Events
* http://camel.apache.org/jsonpath.html
*/
from("activemq:event.ingestion").
process(new TrackingIdProcessor()).
choice().
when().jsonpath("$[?(@.class==inpatient)]").
to("activemq:event.inpatient").
otherwise().
to("activemq:event.outpatient").
end().
to("activemq:event.audit");
Spring-Boot	&	Apache	Camel
Java Runtime Environment (JRE)
Spring IOC Container
Camel Route Engine
Camel Route
<JMS Component>
Endpoint (From)
<EIP Processor>
Some Processing
<DB Component>
Endpoint (To)
Camel
Message
Configurations
/** Spring Boot – Camel Route Application */
@Configuration
@ImportResource("classpath:camel-route-spring.xml")
public class MagicRouterApplication {
public static void main(String[] args) {
SpringApplication.run(MagicRouterApplication.class, args);
}
}
Spring Boot Application
<Executable JAR>
Message Broker
<JMS Provider>
Queue
<magic.order>
Content Router
Queue
<priority.orders>
Queue
<emagic.orders>
Camel Routes
Queue
<emagic.order>
Splitter
Producer
<Message Client>
Srping-Boot Application
<execution environment>
Message
Subscriber
Configuration
Message
Listener
Producer
<Console>
Exercise:	Content	Based	Routing
Exercise	:	Content	Based	Routing
1. Build	project	and	import	into	IDE	(e.g.	Eclipse,	IntelliJ)
2. View	MagicRouteBuilder.java &	MagicRouterApplication.java
3. View	camel-route-spring.xml
4. Execute	Spring	Boot	Application
5. Execute	Message	Client
cd camel-standalone-router
mvn clean install
mvn eclipse:eclipse
mvn spring-boot:run OR
java –jar ./target/camel-standalone-router-1.0.0.jar
java -jar message-client-1.0.0.jar emagic.orders
Exercise	:	Content	Based	Routing
6. Open	ActiveMQ Web	Console	and	view	priority.order queue
7. View	Magic	Supplies	log	for	orders	processed	(magic.order)
8. View	Camel	Standalone	– JConsole
9. Connect	to	Camel	– hawtio
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
jconsole {pid}
Exercise:	Content	Based	Routing	- Docker
1. Build	Camel	Standalone	Router	Docker	Compose
2. Start	Camel	Standalone	Router	Docker	
3. Execute	Test
4. View	Messages	from	ActiveMQ or	Hawtio (priority.order)
5. View	Magic	Supplies	log	for	orders	processed	(magic.order)
docker compose up
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
mvn clean install
docker-compose build
http://localhost:9999/message/emagic.orders
Stop existing Docker-Compose Message Client
Hawtio connect	to	Camel- Docker
1. Open	in	Browser
2. Connect	Remote to	Camel
http://localhost:8090/hawtio
endpoints.jolokia.sensitive=falseapplication.properties
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
<version>1.3.7</version>
</dependency>
pom.xml
Camel Unit Testing
@Override
protected	CamelContext createCamelContext()	throws	Exception	{
CamelContext context	=	super.createCamelContext();
//setup	routes	to	Mock	Endpoints
context.addRoutes(new RouteBuilder()	{
public	void	configure()	{
//test	xpath split
from	("direct:split").
split(new XPathBuilder (MagicRouteBuilder.splitXpath)).
to("mock:order");
});
return	context;
}
@Test
public	void	testSplitLogic()	throws	Exception	{
//Set	expectations
MockEndpoint order	=	getMockEndpoint("mock:order");
order.expectedMessageCount(3);
//read	in	a	small	batch
String	xml	=	IOUtils.toString(this.getClass().
getResourceAsStream("batch.xml"),	"UTF-8");
//execute	the	test
template.sendBody("direct:split",	xml);
//should	be	three	orders	in	the	batch
order.assertIsSatisfied();
}
MagicRouteBuilderTest.java
Camel Functional	Testing
1. Download	and	install	Apache	JMeter
2. Copy	$ACTIVEMQ_HOME/activemq-all-5.13.1.jar	to	$JMETER_HOME/lib
3. Start	JMeter - ./jmeter.sh or	jmeter.bat
4. Open	camel-magic-router/src/test/jmeter/Mock Camel	Publisher.jmx
5. Run	test
Other	possible	frameworks
• RobotFramework
• SOAPUI
Message Broker
<JMS Provider>
Producer
<JMeter>
Queue
<emagic.dead>
Queue
<emagic.orders>
Camel Routes
Splitter Dead Letter
Channel
Demo:	Dead	Letter	Channel
errorHandler(deadLetterChannel("activemq:emagic.dead").maximumRedeliveries(1).redeliveryDelay(1000));
java -jar message-client-1.0.0.jar emagic.bad
http://localhost:9999/message/emagic.bad
Extensible	Messaging
ActiveMQ Master Broker
<execution environment>
ActiveMQ Slave A Broker
<execution environment>
ActiveMQ Slave B Broker
<execution environment>
Spring Boot Application 1
<Executable JAR>
Camel Routes
Spring Boot Application 2
<Executable JAR>
Spring Boot Application 3
<Executable JAR>
Camel Routes Camel Routes
Spring-Boot	&	Camel	– ActiveMQ Integration
Primary	Benefits:	
§ Resiliency	– Camel	Route	failure	does	not	take	down	Broker
§ Extensibility	– Swap	out	Message	Broker	or	EIP	Framework
§ Continuous	Development	– No	Broker	or	Web	Server	downtime
Competing	Consumers
ActiveMQ Broker
<execution environment>
Spring Boot App 1
<Executable JAR>
Camel Routes
Spring Boot App 2
<Executable JAR>
Camel Routes
Spring Boot App 3
<Executable JAR>
Camel Routes
Queue
<emagic.order>
Golden	Path – Processed	once	in	order
Bad Producer
Redis
<execution environment>
Key-Value
Store
Idempotent Competing	Consumers
Spring-Boot	&	Camel	– Deployment	Options
Linux VM
Camel
Route
<Execution Environment>
Spring-Boot Camel
Camel
Route
Properties Log
Linux VM
Camel
Route
<Execution Environment>
Spring-Boot Camel
Camel
Route
Properties Log
Port: 2100
Camel
Route
<Execution Environment>
Spring-Boot Camel
Camel
Route
Properties Log
Port: 2101
§ Single	Application	per	VM
§ Multiple	Applications	per	VM
§ IaaS Container	(e.g.	Docker)
§ PaaS Container	(e.g.	Cloud	Foundry)
Exercise:	Enrichment	and	Transformation
1. Update:	Replace	Simple	Choice	Route	with	Mediation	Route
2. Stop	Spring	Boot,	Build	Project,	and	Start	Spring	Boot
XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
xmlJsonFormat.setForceTopLevelObject(true);
from("activemq:emagic.order").
choice().
when().simple("${in.body} contains 'Houdini'").
process(new Processor() {
public void process(Exchange exchange) {
exchange.getIn().setHeader("VIP", "true");
}
}).
to("activemq:priority.order").
otherwise().
marshal(xmlJsonFormat).
transform(body().regexReplaceAll("@", "")).
to("activemq:magic.order");
mvn clean install
mvn spring-boot:run OR
java –jar ./target/camel-standalone-router-1.0.0.jar
Exercise:	Enrichment	and	Transformation
3. Execute	Message	Client
4. Open	ActiveMQ Web	Console	and	view	priority.order queue
5. View	Magic	Supplies	log	for	orders	processed
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
java -jar message-client-1.0.0.jar emagic.orders
Exercise:	Enrichment	and	Transformation	- Docker
1. Update:	Replace	Simple	Choice	Route	with	Mediation	Route
XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
xmlJsonFormat.setForceTopLevelObject(true);
from("activemq:emagic.order").
choice().
when().simple("${in.body} contains 'Houdini'")
process(new Processor() {
public void process(Exchange exchange) {
exchange.getIn().setHeader("VIP", "true");
}
})
to("activemq:priority.order").
otherwise().
marshal(xmlJsonFormat).
transform(body().regexReplaceAll("@", "")).
to("activemq:magic.order");
Exercise:	Enrichment	and	Transformation	- Docker
1. Build	Camel	Standalone	Router	Docker	Compose
2. Start	Camel	Standalone	Router	Docker	
3. Execute	Test
4. View	Message	from	ActiveMQ or	hawtio (priority.order)
5. View	Magic	Supplies	log	for	orders	processed
docker compose up
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
mvn clean install
docker-compose build
http://localhost:9999/message/emagic.orders
Exercise:	Wire-Tap
1. Replace	Routing	w/:	Wire-Tap	to	Splitter	and	Evaluation	Route
2. Stop	Spring	Boot,	Build	Project,	and	Start	Spring	Boot
3. Execute	Message	Client	&	View	Results
from("activemq:emagic.order").
wireTap("direct:ministry").
to("activemq:magic.order");
from("direct:ministry").
choice().
when().simple("${in.body}	contains	'Elder'").
log("ILLEGAL	MAGIC	ALERT").
to("activemq:topic:magic.alerts").
otherwise().
log("...off	into	the	ether");
mvn clean install
mvn spring-boot:run OR
java –jar ./target/camel-standalone-router-1.0.0.jar
java -jar message-client-1.0.0.jar emagic.orders
Open http://localhost:8161/admin/queues.jsp
Open http://localhost:8161/admin/topics.jsp Wire Ttap
Exercise:	Wire-Tap - Docker
1. Replace	Routing	w/:	Wire-Tap	to	Splitter	and	Evaluation	Route
Wire Ttap
from("activemq:emagic.order").
wireTap("direct:ministry").
to("activemq:magic.order");
from("direct:ministry").
choice().
when().simple("${in.body}	contains	'Elder'").
log("ILLEGAL	MAGIC	ALERT").
to("activemq:topic:magic.alerts").
otherwise().
log("...off	into	the	ether");
Exercise:	Wire-Tap- Docker
1. Build	Camel	Standalone	Router	Docker	Compose
2. Start	Camel	Standalone	Router	Docker	
3. Execute	Test
4. View	Messages	from	ActiveMQ or	hawtio
docker compose up
Open http://localhost:8161/admin/ {admin/admin}
Open http://localhost:8161/admin/queues.jsp
Open http://localhost:8161/admin/topics.jsp
mvn clean install
docker-compose build
http://localhost:9999/message/emagic.orders
Wire Ttap
Bonus	Exercise:	Idempotent	Consumer	(In-Memory)
?
Idempotent Consumer
1. View	IdempotentConsumerRouteBuilder in	Camel-Standalone-
Router
2. Start	Camel-Standalone	Router
3. Execute	Message	Client
4. Open	ActiveMQ Web	Console	(or	view	via	hawtio)
5. View	Magic	Supplies	log	for	orders	processed	(magic.order)
• Only two of three sent messages should be present.
mvn spring-boot:run OR
java –jar ./target/camel-standalone-router-1.0.0.jar
java -jar message-client-1.0.0.jar unique.orders
Bonus	Exercise:	Idempotent	Consumer	(In-Memory)
1. View	IdempotentConsumerRouteBuilder in	Camel-Standalone-Router
2. Start	Camel	Standalone	Router	Docker	
3. Execute	Test
4. View	Messages	from	ActiveMQ or	Hawtio
5. View	Magic	Supplies	log	for	orders	processed	(magic.order)
• Only two of three sent messages should be present.
docker compose up
http://localhost:9999/message/unique.orders
?
Idempotent Consumer
docker logs -f {magic-supplies-container id}
Bonus	Exercise:	Idempotent	Consumer	(Redis)
?
Idempotent Consumer
1. Download	Install	Redis
• Mac:	brew install redis
• Linux:	yum install redis
• Windows:	https://github.com/rgl/redis/downloads
2. Update	camel-route-spring.xml – Uncomment
3. Execute	Message	Client
<!-- Redis Configuration-->
<bean id="redisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="localhost"/>
<property name="port" value="6379"/>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="redisConnectionFactory"/>
</bean>
Bonus	Exercise*:	Idempotent	Consumer	(Redis)
1. Update	IdempotentConsumerRouteBuilder – Comment:
2. Update	IdempotentConsumerRouteBuilder - Uncomment
3. Stop	Spring	Boot,	Build	Project,	and	Start	Spring	Boot
from("activemq:unique.order").
idempotentConsumer(header("uniqueId"),
MemoryIdempotentRepository.memoryIdempotentRepository(200)).
to("activemq:magic.order");
..
@AutowiredRedisTemplate<String, String> redisTemplate;
..
from("activemq:unique.order").
idempotentConsumer(header("uniqueId"),
RedisIdempotentRepository.redisIdempotentRepository(redisTemplate, "camel-repo")).
to("activemq:magic.order");
mvn clean install
mvn spring-boot:run OR
java –jar ./target/camel-standalone-router-1.0.0.jar
*LOCAL	ONLY	– But	for	Spring-Redis-Docker	See:	https://github.com/jtdeane/magic-batch
Bonus	Exercise	*:	Idempotent	Consumer	(Redis)
?
Idempotent Consumer
1. Execute	Message	Client
2. Open	ActiveMQ Web	Console	(or	view	via	hawtio)
3. View	Magic	Supplies	log	for	orders	processed	(magic.order)
• Only two of three sent messages should be present.
java -jar message-client-1.0.0.jar unique.orders
*LOCAL	ONLY	– But	for	Spring-Redis-Docker	See:	https://github.com/jtdeane/magic-batch
Questions	&	FeedbackQuestions	&	Feedback
My	Contact	
information:
Jeremy	Deane
jeremy.deane@gmail.com
http://jeremydeane.net
https://github.com/jtdeane/magic-supplies
https://github.com/jtdeane/message-client
https://github.com/jtdeane/docker-message-client
https://github.com/jtdeane/camel-standalone-router

More Related Content

What's hot

Os dev tool box
Os dev tool boxOs dev tool box
Os dev tool boxbpowell29a
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationTomcat Expert
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Andreas Koop
 
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?Julian Robichaux
 
Java and windows azure cloud service
Java and windows azure cloud serviceJava and windows azure cloud service
Java and windows azure cloud serviceJeffray Huang
 
Troubleshooting the Puppet Enterprise Stack
Troubleshooting the Puppet Enterprise StackTroubleshooting the Puppet Enterprise Stack
Troubleshooting the Puppet Enterprise StackPuppet
 
Writing & Sharing Great Modules on the Puppet Forge
Writing & Sharing Great Modules on the Puppet ForgeWriting & Sharing Great Modules on the Puppet Forge
Writing & Sharing Great Modules on the Puppet ForgePuppet
 
Introduction To Maven2
Introduction To Maven2Introduction To Maven2
Introduction To Maven2Shuji Watanabe
 
VCL template abstraction model and automated deployments to Fastly
VCL template abstraction model and automated deployments to FastlyVCL template abstraction model and automated deployments to Fastly
VCL template abstraction model and automated deployments to FastlyFastly
 
Implementing Early Hints in Chrome - Approaches and Challenges
Implementing Early Hints in Chrome - Approaches and ChallengesImplementing Early Hints in Chrome - Approaches and Challenges
Implementing Early Hints in Chrome - Approaches and ChallengesViet-Hoang Tran
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
OSGi framework overview
OSGi framework overviewOSGi framework overview
OSGi framework overviewBalduran Chang
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3Rob Tweed
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesChris Bailey
 
From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011Carlos Sanchez
 
Apache Tomcat + Java EE = Apache TomEE
Apache Tomcat + Java EE = Apache TomEEApache Tomcat + Java EE = Apache TomEE
Apache Tomcat + Java EE = Apache TomEEJacek Laskowski
 
Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Fastly
 
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationRob Tweed
 

What's hot (20)

Os dev tool box
Os dev tool boxOs dev tool box
Os dev tool box
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 Presentation
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
 
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
 
Java and windows azure cloud service
Java and windows azure cloud serviceJava and windows azure cloud service
Java and windows azure cloud service
 
Troubleshooting the Puppet Enterprise Stack
Troubleshooting the Puppet Enterprise StackTroubleshooting the Puppet Enterprise Stack
Troubleshooting the Puppet Enterprise Stack
 
Writing & Sharing Great Modules on the Puppet Forge
Writing & Sharing Great Modules on the Puppet ForgeWriting & Sharing Great Modules on the Puppet Forge
Writing & Sharing Great Modules on the Puppet Forge
 
Introduction To Maven2
Introduction To Maven2Introduction To Maven2
Introduction To Maven2
 
VCL template abstraction model and automated deployments to Fastly
VCL template abstraction model and automated deployments to FastlyVCL template abstraction model and automated deployments to Fastly
VCL template abstraction model and automated deployments to Fastly
 
Implementing Early Hints in Chrome - Approaches and Challenges
Implementing Early Hints in Chrome - Approaches and ChallengesImplementing Early Hints in Chrome - Approaches and Challenges
Implementing Early Hints in Chrome - Approaches and Challenges
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
OSGi framework overview
OSGi framework overviewOSGi framework overview
OSGi framework overview
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
 
Hacking Tomcat
Hacking TomcatHacking Tomcat
Hacking Tomcat
 
From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011
 
Apache Tomcat + Java EE = Apache TomEE
Apache Tomcat + Java EE = Apache TomEEApache Tomcat + Java EE = Apache TomEE
Apache Tomcat + Java EE = Apache TomEE
 
Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015
 
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
 

Similar to Enterprise Messaging Foundations

Introduction maven3 and gwt2.5 rc2 - Lesson 01
Introduction maven3 and gwt2.5 rc2 - Lesson 01Introduction maven3 and gwt2.5 rc2 - Lesson 01
Introduction maven3 and gwt2.5 rc2 - Lesson 01rhemsolutions
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialRaghavan Mohan
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Michele Orselli
 
Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...Boris Kravtsov
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidenceJohn Congdon
 
Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetAchieve Internet
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierCarlos Sanchez
 
Apache Tomcat 8 Application Server
Apache Tomcat 8 Application ServerApache Tomcat 8 Application Server
Apache Tomcat 8 Application Servermohamedmoharam
 
Spring Live Sample Chapter
Spring Live Sample ChapterSpring Live Sample Chapter
Spring Live Sample ChapterSyed Shahul
 
Server(less) Swift at SwiftCloudWorkshop 3
Server(less) Swift at SwiftCloudWorkshop 3Server(less) Swift at SwiftCloudWorkshop 3
Server(less) Swift at SwiftCloudWorkshop 3kognate
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Roberto Franchini
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year laterChristian Ortner
 
Install spark on_windows10
Install spark on_windows10Install spark on_windows10
Install spark on_windows10Ajay Ohri
 
Apache Web Services
Apache Web ServicesApache Web Services
Apache Web Serviceslkurriger
 
A Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can UnderstandA Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can UnderstandJeremy Gimbel
 
A Java Microservices Spring Boot and Docker case study.
A Java Microservices Spring Boot and Docker case study.A Java Microservices Spring Boot and Docker case study.
A Java Microservices Spring Boot and Docker case study.Subramanyam Vemala
 

Similar to Enterprise Messaging Foundations (20)

Introduction maven3 and gwt2.5 rc2 - Lesson 01
Introduction maven3 and gwt2.5 rc2 - Lesson 01Introduction maven3 and gwt2.5 rc2 - Lesson 01
Introduction maven3 and gwt2.5 rc2 - Lesson 01
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorial
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))
 
Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...Automated integration testing of distributed systems with Docker Compose and ...
Automated integration testing of distributed systems with Docker Compose and ...
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 
Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and Puppet
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
Apache Tomcat 8 Application Server
Apache Tomcat 8 Application ServerApache Tomcat 8 Application Server
Apache Tomcat 8 Application Server
 
Spring Live Sample Chapter
Spring Live Sample ChapterSpring Live Sample Chapter
Spring Live Sample Chapter
 
Spring Lab
Spring LabSpring Lab
Spring Lab
 
Server(less) Swift at SwiftCloudWorkshop 3
Server(less) Swift at SwiftCloudWorkshop 3Server(less) Swift at SwiftCloudWorkshop 3
Server(less) Swift at SwiftCloudWorkshop 3
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
 
Install spark on_windows10
Install spark on_windows10Install spark on_windows10
Install spark on_windows10
 
Welcome to Jenkins
Welcome to JenkinsWelcome to Jenkins
Welcome to Jenkins
 
Tomcat tutorail
Tomcat tutorailTomcat tutorail
Tomcat tutorail
 
Mc sl54 051_ (1)
Mc sl54 051_ (1)Mc sl54 051_ (1)
Mc sl54 051_ (1)
 
Apache Web Services
Apache Web ServicesApache Web Services
Apache Web Services
 
A Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can UnderstandA Docker-based Development Environment Even I Can Understand
A Docker-based Development Environment Even I Can Understand
 
A Java Microservices Spring Boot and Docker case study.
A Java Microservices Spring Boot and Docker case study.A Java Microservices Spring Boot and Docker case study.
A Java Microservices Spring Boot and Docker case study.
 

Recently uploaded

How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...software pro Development
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 

Recently uploaded (20)

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 

Enterprise Messaging Foundations