¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³ | »áÔ±ÖÐÐÄ | ÎÒҪͶ¸å Àî´óͬ £¨https://www.lidatong.com.cn/£©- ¿Æ¼¼¡¢½¨Õ¾¡¢¾­Ñé¡¢ÔƼÆËã¡¢5G¡¢´óÊý¾Ý,Õ¾³¤Íø!
µ±Ç°Î»Ö㺠Ê×Ò³ > ±à³Ì¿ª·¢ > Java > ÕýÎÄ

SpringBootʵս(ʮһ)Ö®ÓëJMS¼òµ¥Í¨ÐÅ

·¢²¼Ê±¼ä£º2020-12-15 07:12:09 ËùÊôÀ¸Ä¿£ºJava À´Ô´£ºÍøÂçÕûÀí
µ¼¶Á£ºÊ²Ã´ÊÇJMS£¿ ÒýÓðٶȰٿÆÉϵÄ˵Ã÷: JMS¼´JavaÏûÏ¢·þÎñ£¨Java Message Service£©Ó¦ÓóÌÐò½Ó¿Ú£¬ÊÇÒ»¸öJavaƽ̨ÖйØÓÚÃæÏòÏûÏ¢Öмä¼þ£¨MOM£©µÄAPI£¬ÓÃÓÚÔÚÁ½¸öÓ¦ÓóÌÐòÖ®¼ä£¬»ò·Ö²¼Ê½ÏµÍ³Öз¢ËÍÏûÏ¢£¬½øÐÐÒ첽ͨÐÅ¡£JavaÏûÏ¢·þÎñÊÇÒ»¸öÓë¾ßÌåƽ̨Î޹صÄAPI£¬

ʲôÊÇJMS£¿

ÒýÓðٶȰٿÆÉϵÄ˵Ã÷:

JMS¼´JavaÏûÏ¢·þÎñ£¨Java Message Service£©Ó¦ÓóÌÐò½Ó¿Ú£¬ÊÇÒ»¸öJavaƽ̨ÖйØÓÚÃæÏòÏûÏ¢Öмä¼þ£¨MOM£©µÄAPI£¬ÓÃÓÚÔÚÁ½¸öÓ¦ÓóÌÐòÖ®¼ä£¬»ò·Ö²¼Ê½ÏµÍ³Öз¢ËÍÏûÏ¢£¬½øÐÐÒ첽ͨÐÅ¡£JavaÏûÏ¢·þÎñÊÇÒ»¸öÓë¾ßÌåƽ̨Î޹صÄAPI£¬¾ø´ó¶àÊýMOMÌṩÉ̶¼¶ÔJMSÌṩ֧³Ö¡£
JMSÊÇÒ»ÖÖÓ볧ÉÌÎÞ¹ØµÄ API£¬ÓÃÀ´·ÃÎÊÏûÏ¢ÊÕ·¢ÏµÍ³ÏûÏ¢£¬ËüÀàËÆÓÚJDBC(Java Database Connectivity)¡£ÕâÀJDBC ÊÇ¿ÉÒÔÓÃÀ´·ÃÎÊÐí¶à²»Í¬¹ØϵÊý¾Ý¿âµÄ API£¬¶ø JMS ÔòÌṩͬÑùÓ볧ÉÌÎ޹صķÃÎÊ·½·¨£¬ÒÔ·ÃÎÊÏûÏ¢ÊÕ·¢·þÎñ¡£Ðí¶à³§É̶¼Ö§³Ö JMS£¬°üÀ¨ IBM µÄ MQSeries¡¢BEAµÄ Weblogic JMS serviceºÍ Progress µÄ SonicMQ¡£ JMS ʹÄúÄܹ»Í¨¹ýÏûÏ¢ÊÕ·¢·þÎñ£¨ÓÐʱ³ÆΪÏûÏ¢Öнé³ÌÐò»ò·ÓÉÆ÷£©´ÓÒ»¸ö JMS ¿Í»§»úÏòÁíÒ»¸ö JMS¿Í»§»ú·¢ËÍÏûÏ¢¡£ÏûÏ¢ÊÇ JMS ÖеÄÒ»ÖÖÀàÐͶÔÏó£¬ÓÉÁ½²¿·Ö×é³É£º±¨Í·ºÍÏûÏ¢Ö÷Ìå¡£±¨Í·ÓÉ·ÓÉÐÅÏ¢ÒÔ¼°ÓйظÃÏûÏ¢µÄÔªÊý¾Ý×é³É¡£ÏûÏ¢Ö÷ÌåÔòЯ´ø×ÅÓ¦ÓóÌÐòµÄÊý¾Ý»òÓÐЧ¸ºÔØ¡£¸ù¾ÝÓÐЧ¸ºÔصÄÀàÐÍÀ´»®·Ö£¬¿ÉÒÔ½«ÏûÏ¢·ÖΪ¼¸ÖÖÀàÐÍ£¬ËüÃÇ·Ö±ðЯ´ø£º¼òµ¥Îı¾(TextMessage)¡¢¿ÉÐòÁл¯µÄ¶ÔÏó (ObjectMessage)¡¢ÊôÐÔ¼¯ºÏ (MapMessage)¡¢×Ö½ÚÁ÷ (BytesMessage)¡¢Ô­Ê¼ÖµÁ÷ (StreamMessage)£¬»¹ÓÐÎÞÓÐЧ¸ºÔصÄÏûÏ¢ (Message)¡£
?
ÏÂÃæ½øÈëSpringBoot¼òµ¥Ê¹ÓÃJMSʾÀý:
?
Ò»¡¢µ¼ÈëÒÀÀµ
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    modelVersion>4.0.0</>

    groupId>org.springframeworkartifactId>gs-messaging-jmsversion>0.1.0parent>
        >org.springframework.boot>spring-boot-starter-parent>1.5.8.RELEASEpropertiesjava.version>1.8java.versiondependenciesdependency>
            >spring-boot-starter-activemq>org.apache.activemq>activemq-broker>

        >com.fasterxml.jackson.core>jackson-databindbuildpluginsplugin>
                >spring-boot-maven-plugin>

project>

?

¶þ¡¢±àдÏûÏ¢½ÓÊÕÆ÷

package hello;

public class Email {

    private String to;
    private String body
    public Email() {
    }

    public Email(String to, String body) {
        this.to = to;
        this.body = body    }

    public String getTo() {
        return to    }

    public void setTo(String to) {
        this.to = to    }

    public String getBody() {
        return body    }

    public void setBody(String body) {
        this.body = body    }

    @Override
    public String toString() {
        return String.format("Email{to=%s,body=%s}",getTo(),getBody())    }

}

?

Èý¡¢¶¨ÒåÏûÏ¢½ÓÊÕÕß

package hello;

import org.springframework.jms.annotation.JmsListener;
 org.springframework.stereotype.Component;

@Component
public class Receiver {

    @JmsListener(destination = "mailbox",containerFactory = "myFactory")
    void receiveMessage(Email email) {
        System.out.println("Received <" + email + ">");
    }

}

ReceiverÒ²±»³ÆΪÏûÏ¢Çý¶¯µÄPOJO¡£ÕýÈçÄúÔÚÉÏÃæµÄ´úÂëÖÐËù¿´µ½µÄ£¬²»ÐèҪʵÏÖÈκÎÌض¨µÄ½Ó¿Ú»ò·½·¨¾ßÓÐÈκÎÌض¨µÄÃû³Æ¡£´ËÍ⣬¸Ã·½·¨¿ÉÒÔ¾ßÓзdz£Áé»îµÄÇ©Ãû¡£ÇëÌرð×¢Ò⣬´ËÀàÔÚJMS APIÉÏûÓе¼Èë¡£

?

ËÄ¡¢Ê¹ÓÃSpring·¢ËͺͽÓÊÕJMSÏûÏ¢

 javax.jms.ConnectionFactory;

 org.springframework.boot.SpringApplication;
 org.springframework.boot.autoconfigure.SpringBootApplication;
 org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
 org.springframework.context.ConfigurableApplicationContext;
 org.springframework.context.annotation.Bean;
 org.springframework.jms.annotation.EnableJms;
 org.springframework.jms.config.DefaultJmsListenerContainerFactory;
 org.springframework.jms.config.JmsListenerContainerFactory;
 org.springframework.jms.core.JmsTemplate;
 org.springframework.jms.support.converter.MappingJackson2MessageConverter;
 org.springframework.jms.support.converter.MessageConverter;
 org.springframework.jms.support.converter.MessageType;

@SpringBootApplication
@EnableJms
 Application {

    @Bean
    public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        // This provides all boot's default to this factory,including the message converter
        configurer.configure(factory,connectionFactory);
         You could still override some of Boot's default if necessary.
        return factory;
    }

    @Bean  Serialize message content to json using TextMessage
    public MessageConverter jacksonJmsMessageConverter() {
        MappingJackson2MessageConverter converter =  MappingJackson2MessageConverter();
        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
         converter;
    }

    static  main(String[] args) {
         Launch the application
        ConfigurableApplicationContext context = SpringApplication.run(Application.,args);

        JmsTemplate jmsTemplate = context.getBean(JmsTemplate.);

         Send a message with a POJO - the template reuse the message converter
        System.out.println("Sending an email message.");
        jmsTemplate.convertAndSend("mailbox",1)">new Email("info@example.com","Hello"));
    }

}

?

?

@Bean×¢½â£¬Ö÷Òª×÷ÓÃÊÇ¿ØÖÆ·´×ª(IOC£©£¬Í¬

??? <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
??? </bean>

¾ÙÀý˵Ã÷:

ÀýÈçÒÔMessageΪÀý:

?

@Bean
 String message() {
    return new String("hello");
}

?

ËüµÈ¼ÛÓÚ

<bean id="message" class="java.lang.String">
    <constructor-arg index="0" value="hello"/>
</bean>

?

ͨ³£Çé¿öÏ£¬ÓÐÈýÖÖÅäÖÃBeanµÄ·½Ê½:

ÈçͼËùʾ

?

?

?¹ØÓÚBean×¢½âÈýÖÖÅäÖ÷¨£¬ÉîÈë½éÉÜ¿ÉÒԲο¼¸Ã²©ÎÄ:https://blog.csdn.net/icarus_wang/article/details/51649635

?

?

@EnableJms ´¥·¢·¢ÏÖ´ø×¢Ê͵ķ½·¨@JmsListener£¬ÔÚ·âÃæÏ´´½¨ÏûÏ¢¼àÌýÆ÷ÈÝÆ÷¡£

?

ΪÇå³þÆð¼û£¬ÎÒÃÇ»¹¶¨ÒåÁËÒ»¸öÔÚ½ÓÊÕÆ÷×¢ÊÍÖÐmyFactoryÒýÓõÄbean?JmsListener¡£ÒòΪÎÒÃÇʹÓÃDefaultJmsListenerContainerFactoryConfigurerSpring BootÌṩµÄ»ù´¡½á¹¹£¬ËùÒÔJmsMessageListenerContainerËüÓëĬÈÏÇé¿öÏÂÒýµ¼´´½¨µÄ»ù´¡½á¹¹Ïàͬ¡£

?

ĬÈÏMessageConverterÊÇÄܹ»×ª»»Ö»Óлù±¾ÀàÐÍ£¨ÀýÈçString£¬Map£¬Serializable£©ÎÒÃÇEmailÊDz»ÊÇSerializable¹ÊÒâµÄ¡£ÎÒÃÇÏëҪʹÓÃJackson²¢ÒÔÎı¾¸ñʽ½«ÄÚÈÝÐòÁл¯Îªjson£¨¼´×÷Ϊa?TextMessage£©¡£Spring Boot½«¼ì²âaµÄ´æÔÚ£¬MessageConverter²¢½«ÆäÓëĬÈÏÖµJmsTemplateºÍÈκÎJmsListenerContainerFactory´´½¨ÕßÏà¹ØÁªDefaultJmsListenerContainerFactoryConfigurer¡£

?

JmsTemplateʹÏûÏ¢·¢Ë͵½JMSÄ¿µÄµØ±äµÃ·Ç³£¼òµ¥¡£ÔÚmainrunner·½·¨ÖУ¬Æô¶¯ºó£¬Äú¿ÉÒÔʹÓÃjmsTemplate·¢ËÍEmailPOJO¡£ÒòΪÎÒÃǵÄ×Ô¶¨ÒåMessageConverterÒÑ×Ô¶¯¹ØÁªµ½Ëü£¬ËùÒÔÖ»»áÉú³ÉÒ»¸öjsonÎĵµTextMessage¡£

Äãû¿´µ½µÄÁ½¸öbeanÊÇJmsTemplateºÍConnectionFactory¡£ÕâЩÊÇÓÉSpring Boot×Ô¶¯´´½¨µÄ¡£ÔÚÕâÖÖÇé¿öÏ£¬ActiveMQ´úÀíÔËÐÐǶÈëʽ¡£

×¢Òâ:

Spring?JmsTemplate¿ÉÒÔͨ¹ýËüµÄreceive·½·¨Ö±½Ó½ÓÊÕÏûÏ¢£¬µ«ÕâÖ»ÄÜͬ²½¹¤×÷£¬ÕâÒâζ×ÅËü»á×èÈû¡£Õâ¾ÍÊÇΪʲôÎÒÃǽ¨ÒéÄúʹÓÃÕìÌýÆ÷ÈÝÆ÷£¬ÀýÈçDefaultMessageListenerContainerʹÓûùÓÚ»º´æµÄÁ¬½Ó¹¤³§£¬ÕâÑùÄú¾Í¿ÉÒÔÒ첽ʹÓÃÏûÏ¢²¢ÒÔ×î´óµÄÁ¬½ÓЧÂÊ¡£

?

×îºóÔËÐнá¹ûÈçÏÂͼËùʾ:

?

£¨±à¼­£ºÀî´óͬ£©

¡¾ÉùÃ÷¡¿±¾Õ¾ÄÚÈݾùÀ´×ÔÍøÂ磬ÆäÏà¹ØÑÔÂÛ½ö´ú±í×÷Õ߸öÈ˹۵㣬²»´ú±í±¾Õ¾Á¢³¡¡£ÈôÎÞÒâÇÖ·¸µ½ÄúµÄȨÀû£¬Ç뼰ʱÓëÁªÏµÕ¾³¤É¾³ýÏà¹ØÄÚÈÝ!

    ÍƼöÎÄÕÂ
      ÈȵãÔĶÁ