Giriş
Şu satırı dahil ederiz. Bu sınıf hem yazma hem de okuma için kullanılabilir. Ancak okuma için tercih senkron çalıştığı için edilmiyor.
Şöyle yaparız.
Şöyle yaparız.
convertAndSend() metodu metodları ilk parametre olarak ya "queue name" ya da Destinaton nesnesi alır. Bu parametreye göre overload edilmiş bir sürü convertAndSend() metodu var.
convertAndSend metodu - Queue Name + Object
Örnek
Şöyle yaparız.
Örnek
Mesajı biraz gecikme ile gödermek için şöyle yaparız
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Belirtilen isme sahip kuyruğu döndürür. Şöyle yaparız.
Şöyle yaparız.
Örnek
Şu satırı dahil ederiz. Bu sınıf hem yazma hem de okuma için kullanılabilir. Ancak okuma için tercih senkron çalıştığı için edilmiyor.
import org.springframework.jms.core.JmsTemplate;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
constructorŞöyle yaparız.
JmsTemplate jmsTemplate = new JmsTemplate();
browse metoduŞöyle yaparız.
int count = this.jmsTemplate.browse(queue_name, new BrowserCallback<Integer>() {
public Integer doInJms(final Session session, final QueueBrowser browser)
throws JMSException {
Queue queue1 = browser.getQueue();
Enumeration enumeration = browser.getEnumeration();
int counter = 0;
while (enumeration.hasMoreElements()) {
Message msg = (Message) enumeration.nextElement();
...
counter += 1;
}
return counter;
}
});
convertAndSend metoduconvertAndSend() metodu metodları ilk parametre olarak ya "queue name" ya da Destinaton nesnesi alır. Bu parametreye göre overload edilmiş bir sürü convertAndSend() metodu var.
convertAndSend metodu - Queue Name + Object
Örnek
Şöyle yaparız.
JmsTemplate template = ...
Foo foo = new Foo(...);
template.convertAndSend("my-destination", foo);
convertAndSend metodu - Queue Name + Object + MessagePostProcessorÖrnek
Mesajı biraz gecikme ile gödermek için şöyle yaparız
jmsTemplate.convertAndSend(queue, message, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message msg) throws JMSException {
msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 10000);
return msg;
}
});
convertAndSend metodu - Destination + ObjectÖrnek
Şöyle yaparız.
TextMessage txtMsg = ...;
Destination destQ = ...
jmsTemplate.convertAndSend(destQ, txtMsg);
convertAndSend metodu - Queue Name + Object + intŞöyle yaparız.
int waitSecs = rand.nextInt(3);
jmsTemplate.convertAndSend("YourQueueName", new Foo(...), waitSecs);
execute metoduŞöyle yaparız.
Boolean result = hmsTemplate.execute(new SessionCallback<Boolean>() {
@Override
public Boolean doInJms(Session session) throws JMSException {
Topic topic = ((AQjmsSession) session).getTopic(...);
((AQjmsTopicPublisher) publisher).publish(topic,
topicSession.createTextMessage(message),recipientL ist1);
return true;
}
});
getDestinationResolver metoduBelirtilen isme sahip kuyruğu döndürür. Şöyle yaparız.
Destination replyToQName = jmsTemplate.getDestinationResolver()
.resolveDestinationName(session, responseQueueName, false);
receiveSelected metoduŞöyle yaparız.
Destination responseQ = ...
String filter = "..." ;
TextMessage respMsg = (TextMessage) jmsTemplate.receiveSelected(responseQ, filter);
send metodu - topic + MessageCreatorÖrnek
Şöyle yaparız
@Autowired
private JmsTemplate jms;
public void sendTicket(Reservation reservation) {
// Send a message
jms.send("mailbox-destination", new MessageCreator() {
public ObjectMessage createMessage(Session session) throws JMSException {
ObjectMessage message = session.createObjectMessage();
message.setObject(reservation);
return message;
}
});
}
Örnek
Şöyle yaparız. MessageCreator olarak lambda kullanılıyor.
Örnek
Şöyle yaparız.
"Oracle Advanced Queueing" kullanan elimizde şöyle bir kod olsun.
Şöyle yaparız
Şöyle yaparız.
Açıklaması şöyle
Elimizde şöyle bir kod olsun.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
String msg = ...;
msTemplate.send(destinationName, session -> {
Message message = session.createTextMessage(msg);
LOGGER.info(message.getJMSCorrelationID());
LOGGER.info(message.getJMSMessageID());
return message;
});
setConnectionFactory metodu
Örnek
Şöyle yaparız.
ConnectionFactory connectionFactory = ...;
jmsTemplate.setConnectionFactory(connectionFactory);
Örnek"Oracle Advanced Queueing" kullanan elimizde şöyle bir kod olsun.
@Bean
DataSource dataSource() throws SQLException {
OracleDataSource dataSource = new OracleDataSource();
dataSource.setUser("yourusername");
dataSource.setPassword("yourpassword");
dataSource.setURL("jdbc:oracle:thin:@yourserver:1521:xe");
dataSource.setImplicitCachingEnabled(true);
dataSource.setFastConnectionFailoverEnabled(true);
return dataSource;
}
@Bean
public QueueConnectionFactory connectionFactory() throws Exception {
return AQjmsFactory.getQueueConnectionFactory(dataSource());
}
Şöyle yaparız.jmsTemplate.setConnectionFactory(connectionFactory());
setDeliveryDelay metoduŞöyle yaparız
long deliveryDelay = ...;
jmsTemplate.setDeliveryDelay(deliveryDelay);
jmsTemplate.convertAndSend(queue.getName(), event);
setDeliveryMode metoduŞöyle yaparız.
jmsTemplate.setDeliveryMode(DeliveryMode.PERSISTENT);
setMessageConverter metoduAçıklaması şöyle
The default conversion strategy used by JmsTemplate for both ConvertAndSend() and ReceiveAndConvert() operations is the SimpleMessageConverter class.Örnek - MappingJackson2MessageConverter
The SimpleMessageConverter is able to handle TextMessages, BytesMessages, MapMessages, and ObjectMessages. This class implements the MessageConverter interface.
Apart from SimpleMessageConverter, Spring JMS provides some other MessageConverter classes out of the box like MappingJackson2MessageConverter, MarshallingMessageConverter, MessagingMessageConverter.
Elimizde şöyle bir kod olsun.
@Bean
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
Şöyle yaparız.jmsTemplate.setMessageConverter(jacksonJmsMessageConverter());
setPubSubDomain metoduŞöyle yaparız.
jmsTemplate.setPubSubDomain(true);
setReceiveTimeout metoduŞöyle yaparız.
jmsTemplate.setReceiveTimeout(30000L);
setSessionAcknowledgeMode metoduŞöyle yaparız.
jmsTemplate.setSessionAcknowledgeMode(Session.SESSION_TRANSACTED);
setSessionTransacted metodu
Şöyle yaparız.
jmsTemplate.setSessionTransacted(true);
Hiç yorum yok:
Yorum Gönder