Začíname s jarným JMS

1. Prehľad

Spring poskytuje integračný rámec JMS, ktorý zjednodušuje použitie JMS API. Tento článok predstavuje základné koncepty takejto integrácie.

2. Závislosť od Maven

Aby sme mohli v našej aplikácii použiť Spring JMS, musíme do nej pridať potrebné artefakty pom.xml:

 org.springframework spring-jms 4.3.3.RELEASE 

Najnovšiu verziu artefaktu nájdete tu.

3. The JmsTemplate

JmsTemplate trieda sa zaoberá vytváraním a uvoľňovaním zdrojov pri odosielaní alebo synchrónnom prijímaní správ.

Preto trieda, ktorá to používa JmsTemplate stačí implementovať rozhrania spätného volania, ako je uvedené v definícii metódy.

Počnúc jarom 4.1 JmsMessagingTemplate je postavená na JmsTemplate ktorá poskytuje integráciu s abstrakciou správ, t. j. org.springframework.messaging.Message. To nám zase umožňuje vytvoriť správu, ktorá sa má poslať všeobecne.

4. Správa pripojení

Aby sme sa mohli spojiť a mohli odosielať / prijímať správy, musíme nakonfigurovať a ConnectionFactory.

A ConnectionFactory je jedným zo spravovaných objektov JMS, ktoré predkonfiguruje správca. Klient pomocou konfigurácie vytvorí spojenie s poskytovateľom JMS.

Pružina poskytuje 2 typy ConnectionFactory:

  • SingleConnectionFactory - je implementácia ConnectionFactory rozhranie, ktoré vráti rovnaké pripojenie pre všetkých createConnection() volá a ignoruje hovory Zavrieť()
  • CachingConnectionFactory rozširuje funkčnosť SingleConnectionFactory a dodáva ju vylepšuje ukladaním do vyrovnávacej pamäte Relácie, MessageProducersa Spotrebitelia správy

5. Správa miesta určenia

Ako bolo uvedené vyššie, spolu s ConnectionFactory, ciele sú tiež objekty spravované JMS a je možné ich ukladať a načítať z JNDI.

Jar poskytuje generické prekladače ako DynamicDestinationResolver a konkrétni riešitelia ako napr JndiDestinationResolver.

The JmsTemplate deleguje rozlíšenie názvu destinácie na jednu z implementácií založených na našom výbere.

Poskytne tiež nehnuteľnosť tzv defaultDestination - ktorý sa použije s poslať a prijímať operácie, ktoré sa netýkajú konkrétneho cieľa.

6. Konverzia správy

Jarná služba JMS by bola neúplná bez podpory prevádzačov správ.

Predvolená stratégia konverzie, ktorú používa JmsTemplate pre oba ConvertAndSend () a ReceiveAndConvert () operácií je SimpleMessageConverter trieda.

SimpleMessageConverter je schopný zvládnuť Textové správy, ByteMessages, Mapové správya ObjectMessages. Táto trieda implementuje MessageConverter rozhranie.

Okrem toho SimpleMessageConverter, Spring JMS poskytuje niektoré ďalšie MessageConverter triedy po vybalení z krabice MappingJackson2MessageConverter, MarshallingMessageConverter, MessagingMessageConverter.

Okrem toho môžeme vytvoriť vlastnú funkciu na prevod správ jednoducho implementáciou MessageConverter rozhrania toMessage () a FromMessage () metódy.

Pozrime sa na ukážku útržku kódu pri implementácii vlastného kódu MessageConverter,

verejná trieda SampleMessageConverter implementuje MessageConverter {public Object fromMessage (Message message) hodí JMSException, MessageConversionException {// ...} public Message toMessage (Object object, Session session) throws JMSException, MessageConversionException {// ...}}

7. Ukážka pružiny JMS

V tejto časti uvidíme, ako používať a JmsTemplate na odosielanie a prijímanie správ.

Predvolený spôsob odoslania správy je JmsTemplate.send (). Má dva kľúčové parametre, z ktorých prvý je cieľ JMS a druhý parameter je implementácia MessageCreator. JmsTemplate používa MessageCreatorMetóda spätného volania createMessage () na zostavenie správy.

JmsTemplate.send () je vhodný na odosielanie obyčajných textových správ, ale na odosielanie vlastných správ, JmsTemplate má inú metódu nazvanú convertAndSend ().

Nižšie vidíme implementáciu týchto metód:

verejná trieda SampleJmsMessageSender {private JmsTemplate jmsTemplate; front súkromných frontov; // nastavovatelia pre jmsTemplate & front public void simpleSend () {jmsTemplate.send (queue, s -> s.createTextMessage ("hello queue world")); }
 public void sendMessage (zamestnanec zamestnanca) {System.out.println ("Jms Message Sender:" + zamestnanec); Mapová mapa = nová HashMap (); map.put ("meno", zamestnanec.getName ()); map.put ("vek", employee.getAge ()); jmsTemplate.convertAndSend (mapa); }}

Nižšie je uvedená trieda prijímača správ, nazývame ju ako Message-Driven POJO (MDP). Vidíme, že trieda SampleListener implementuje MessageListener rozhranie a poskytuje textovo špecifickú implementáciu pre metódu rozhrania onMessage ().

Okrem toho onMessage () metóda, naša SampleListener trieda nazývaná aj metóda receiveAndConvert () pre príjem vlastných správ:

verejná trieda SampleListener implementuje MessageListener {public JmsTemplate getJmsTemplate () {return getJmsTemplate (); } public void onMessage (správa správy) {if (správa instanceof TextMessage) {try {String msg = (((TextMessage) message) .getText (); System.out.println ("Správa bola spotrebovaná:" + správa); } catch (JMSException ex) {throw new RuntimeException (ex); }} else {hod novu IllegalArgumentException ("chyba spravy"); }} public Employee receiveMessage () hodí JMSException {Map map = (Map) getJmsTemplate (). receiveAndConvert (); vrátiť nového zamestnanca ((reťazec) map.get ("meno"), (celé číslo) map.get ("vek")); }}

Videli sme, ako sa má realizovať MessageListener a nižšie vidíme konfiguráciu v kontexte jarnej aplikácie:

DefaultMessageListenerContainer je predvolený kontajner poslucháčov správ, ktorý Spring poskytuje spolu s mnohými ďalšími špecializovanými kontajnermi.

8. Základná konfigurácia s anotáciami Java

The @JmsListener je jediná anotácia potrebná na prevod metódy normálneho beanu na koncový bod poslucháča JMS. Jarná služba JMS poskytuje oveľa viac poznámok na uľahčenie implementácie služby JMS.

Môžeme vidieť niektoré zo vzorových tried anotovaných nižšie:

@JmsListener (destination = "myDestination") verejné neplatné SampleJmsListenerMethod (objednávka správ) {...}

Ak chcete pridať viacerých poslucháčov k jednej metóde, stačí pridať viac @JmsListener anotácie.

Musíme pridať @EnableJms anotácia k jednej z našich konfiguračných tried na podporu @JmsListener anotované metódy:

@Configuration @EnableJms verejná trieda AppConfig {@Bean public DefaultJmsListenerContainerFactory jmsListenerContainerFactory () {DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory (); factory.setConnectionFactory (connectionFactory ()); vrátiť továreň; }}

9. Obsluha chýb

Môžeme tiež nakonfigurovať vlastný obslužný program chýb pre náš kontajner poslucháčov správ.

Najprv implementujme org.springframework.util.ErrorHandler rozhranie:

@ Verejná trieda @Service SampleJmsErrorHandler implementuje ErrorHandler {// ... logger @Override public void handleError (Throwable t) {LOG.warn ("V predvolenom nastavení obslužného programu chyby JMS ..."); LOG.error ("Chybová správa: {}", t.getMessage ()); }}

Všimnite si, že sme prepísali handleError () metóda, ktorá jednoducho zaznamená chybové hlásenie.

A potom musíme odkazovať na našu službu obsluhy chýb v DefaultJmsListenerConnectionFactory pomocou setErrorHandler () metóda:

@Bean public DefaultJmsListenerContainerFactorybjmsListenerContainerFactory () {DefaultJmsListenerContainerFactory factory = nový DefaultJmsListenerContainerFactory (); factory.setConnectionFactory (connectionFactory ()); factory.setErrorHandler (sampleJmsErrorHandler); vrátiť továreň; }

Vďaka tomu náš nakonfigurovaný obslužný program chýb teraz zachytí všetky nespracované výnimky a správu zaznamená.

Voliteľne tiež môžeme nakonfigurovať obslužnú rutinu chýb pomocou obyčajných konfigurácií XML aktualizáciou našej appContext.xml:

10. Záver

V tomto tutoriáli sme diskutovali o konfigurácii a základných konceptoch Spring JMS. Krátko sme sa pozreli aj na jar JmsTemplate triedy, ktoré sa používajú na odosielanie a prijímanie správ.

Implementáciu kódu nájdete v projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found