-
Notifications
You must be signed in to change notification settings - Fork 5
RabbitMQ Reader
This module have the functionality of listen messages from rabbitMQ and send event to a website with SSE.
Create 2 listeners for 2 different queues but sharing topic exchange.
This is the project structure:
│ pom.xml
├───src
│ ├───main
│ │ ├───java
│ │ │ └───com
│ │ │ └───sh
│ │ │ ├───app
│ │ │ │ AppRabbitReader.java
│ │ │ │
│ │ │ ├───controller
│ │ │ │ StreamCtrl.java
│ │ │ │
│ │ │ ├───events
│ │ │ │ │ CustomerEvent.java
│ │ │ │ │
│ │ │ │ └───publisher
│ │ │ │ EventsPublisher.java
│ │ │ │
│ │ │ └───listener
│ │ │ │ RabbitListener.java
│ │ │ │
│ │ │ └───impl
│ │ │ ListenerCustomer.java
│ │ │ ListenerShop.java
│ │ │
│ │ └───resources
│ │ │ application.properties
│ │ │
│ │ └───static
│ │ │ index.html
│ │ │
│ │ ├───app
│ │ │ app.js
│ │ │
│ │ ├───css
│ │ │ animations.css
│ │ │ bootstrap.css
│ │ │ bootstrap.min.css
│ │ │ font-awesome.css.map
│ │ │ font-awesome.min.css
│ │ │ master.css
│ │ │
│ │ ├───fonts
│ │ │ fontawesome-webfont.eot
│ │ │ fontawesome-webfont.svg
│ │ │ fontawesome-webfont.ttf
│ │ │ fontawesome-webfont.woff
│ │ │ fontawesome-webfont.woff2
│ │ │ FontAwesome.otf
│ │ │
│ │ ├───img
│ │ │ banner.svg
│ │ │
│ │ └───jslib
│ │ angular.min.js
│ │ bootstrap.min.js
│ │ jquery.min.js
│ │ moment-with-locales.min.js
│ │ ui-bootstrap-tpls-2.5.0.min.js
│ │ ui-bootstrap-tpls.js
│ │ underscore-min.js
For configure the listeners we have to declare the same that in publisher:Queue,Topic exchange,bind and connectionFactory configured for rabbitMQ host.
Look listener configuration:
@Bean(name="containerCustomer")
SimpleMessageListenerContainer containerCustomer(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapterCustomer) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setMessageConverter(jsonMessageConverter());
container.setQueueNames(qCustomer);
container.setMessageListener(listenerAdapterCustomer);
return container;
}
@Bean(name="listenerAdapterCustomer")
public MessageListenerAdapter listenerAdapterCustomer(ListenerCustomer receiver) {
MessageListenerAdapter msgAdapter = new MessageListenerAdapter(receiver);
msgAdapter.setMessageConverter(jsonMessageConverter());
msgAdapter.setDefaultListenerMethod(LISTENER_METHOD);
return msgAdapter;
}It's easy to configure listeners,we need a container that configure destination,converter,connectionFactory and listener. we need a message listener adapter,where configure conversion and inject the class that implements the message reception operation, and we set which is the method listener,in my case is a constant.
Now look a interface that all my receivers must implements:
@FunctionalInterface
public interface RabbitListener<T> {
public void receiveMessage(T msg);
}Using generic types, we can implements any bean as Message.
RabbitListener assign message bean type,in this case CustomerMsg (in the common project).