En el post anterior habiamos planteado el
esquema para el envio de mensajes asincronicamente entre dos aplicaciones
usando ActiveMQ como message broker.
Ahora voy a mostar la implementacion de la
App 1, o sea la aplicacion que actua como el componente que envia los mensajes
a la cola (MessageProducer).
El componente está desarrollado con
spring-boot porque simplifica los pasos de tener que seleccionar las
denpendencias y el despliegue en el servidor.
Esta son las dependencias de mi archivo
pom.xml
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
Este es el controlador que recibe una petición
REST y envía un mensaje a la cola.
@RestController
@RequestMapping("/inventario")
public class HelloController {
@Autowired
private Sender sender;
@RequestMapping("/hello")
public String sayHi(){
return "Hello World";
}
@RequestMapping("/helloToQueue")
public void helloToQueue(){
Gson gson = new Gson();
Map mapaResponse = new HashMap();
mapaResponse.put("mensaje","Hello World");
mapaResponse.put("idCliente","1");
String message = gson.toJson(mapaResponse);
sender.send("donaciones",message);
}
}
@RequestMapping("/inventario")
public class HelloController {
@Autowired
private Sender sender;
@RequestMapping("/hello")
public String sayHi(){
return "Hello World";
}
@RequestMapping("/helloToQueue")
public void helloToQueue(){
Gson gson = new Gson();
Map mapaResponse = new HashMap();
mapaResponse.put("mensaje","Hello World");
mapaResponse.put("idCliente","1");
String message = gson.toJson(mapaResponse);
sender.send("donaciones",message);
}
}
La configuracion para conectarme al Message
Broker:
@Component public class BrokerConfig { private static Logger LOGGER = LoggerFactory.getLogger(BrokerConfig.class);
@Bean @Primary public ActiveMQConnectionFactory activeMQConnectionFactory() { LOGGER.info("open conection"); ActiveMQConnectionFactory activeMQConnectionFactory =
new ActiveMQConnectionFactory(); activeMQConnectionFactory.setBrokerURL("tcp://localhost:61616"); activeMQConnectionFactory.setUserName("admin"); activeMQConnectionFactory.setPassword("admin"); return activeMQConnectionFactory; } @Bean public CachingConnectionFactory cachingConnectionFactory() { return new CachingConnectionFactory(activeMQConnectionFactory()); } @Bean public JmsTemplate jmsTemplate() { JmsTemplate template = new JmsTemplate(); template.setConnectionFactory(cachingConnectionFactory()); return template; } }
Y la clase
que se encarga de enviar el mensaje a la cola:
@Component public class Sender { private static final Logger LOGGER = LoggerFactory.getLogger(Sender.class); @Autowired private JmsTemplate jmsTemplate; public void send(final String destination, final String message) { LOGGER.info("sending message='{}' to destination='{}'", message); jmsTemplate.send("donaciones",new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { TextMessage textMessage = session.createTextMessage(message); Destination destinationQueue = session.createQueue("response.queue"); textMessage.setJMSReplyTo(destinationQueue); textMessage.setStringProperty("app","1"); return textMessage; } }); } }

No hay comentarios.:
Publicar un comentario