吴裕雄天生自然SPRING BOOTJMS实例

JMS的自动配置

    Spring Boot对JMS的自动配置位于org.springframework.boot.autoconfigure.jms包下,支持JMS的实现有ActiveMQ和Artemis

    以ActiveMQ为例,Spring Boot为我们定义了ActiveMQConnectionFactory的Bean作为连接,并通过以“spring.activemq”为前缀的属性配置ActiveMQ的连接属性,主要包含:
spring.activemq.broker-url= tcp://localhost:61616
spring.activemq.user=
spring.activemq.password=
spring.activemq.in-memory=true

    另外,Spring Boot在JmsAutoConfiguration自动配置类中为我们配置了JmsTemplate;并且在JmsAnnotationDrivenConfiguration配置类中,为我们开启了注解式消息监听的支持,即自动开启@EnableJms。
我们使用JMS的一种实现ActiveMQ讲解JMS实例。因此,需要事先安装ActiveMQ(注意需要安装jdk)。可访问http://activemq.apache.org/下载符合自己的ActiveMQ。解压缩即可完成安装。
    解压缩后,双击“apache-activemq-5.15.15\bin\win64”下的“wrapper.exe”或“activemq.bat”启动ActiveMQ,然后,通过“http://localhost:8161”运行ActiveMQ的管理界面,管理员账号和密码默认为admin/admin

 

 

 

 

使用JMS的实现ActiveMQ进行两个应用系统间的点对点式通信

1.创建基于Apache ActiveMQ5的Spring Boot应用ch8_1Sender(消息发送者)

2.配置ActiveMQ的消息代理地址

3.定义消息

4.发送消息

5.创建消息接收者(ch8_1Receive)

6.定义消息监听器接收消息

7.运行测试
<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</modelVersion>
    <groupId>com.sender</groupId>
    <artifactId>SpringBootSender</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <!-- 声明项目配置依赖编码格式为 utf-8 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <fastjson.version>1.2.24</fastjson.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
配置文件application.properties中,配置ActiveMQ的消息代理地址,具体如下:

spring.activemq.broker-url= tcp://localhost:61616
package com.ch.ch8_1sender;

import java.util.ArrayList;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.core.MessageCreator;

public class MyMessage implements MessageCreator {
    @Override
    public Message createMessage(Session session) throws JMSException {
        MapMessage mapm = session.createMapMessage();
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("陈恒1");
        arrayList.add("陈恒2");
        mapm.setObject("mesg1", arrayList);// 只能存Java的基本对象
        mapm.setString("mesg2", "测试消息2");
        return mapm;
    }
}
package com.ch.ch8_1sender;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.core.JmsTemplate;

@SpringBootApplication
public class Ch81SenderApplication implements CommandLineRunner{
    @Autowired
    private JmsTemplate jmsTemplate;

    public static void main(String[] args) {
        SpringApplication.run(Ch81SenderApplication.class, args);
    }

    /**
     * 我们这里为了方便操作使用run方法发送消息, 当然完全可以使用控制器通过Web访问
     */
    @Override
    public void run(String... args) throws Exception {
        // new MyMessage()回调接口方法createMessage产生消息
        jmsTemplate.send("mydestination", new MyMessage());
    }
}
创建消息接收者
<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</modelVersion>
    <groupId>com.receiver</groupId>
    <artifactId>SpringBootReceiver</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <!-- 声明项目配置依赖编码格式为 utf-8 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <fastjson.version>1.2.24</fastjson.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
spring.activemq.broker-url= tcp://localhost:61616
package com.ch.ch8_1receive;

import java.util.ArrayList;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class ReceiverMsg {
    @JmsListener(destination = "mydestination")
    public void receiverMessage(MapMessage mapm) throws JMSException {
        @SuppressWarnings("unchecked")
        ArrayList<String> arrayList = (ArrayList<String>) mapm.getObject("mesg1");
        System.out.println(arrayList);
        System.out.println(mapm.getString("mesg2"));
    }
}
package com.ch.ch8_1receive;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Ch81ReceiveApplication {
    public static void main(String[] args) {
        SpringApplication.run(Ch81ReceiveApplication.class, args);
    }
}

 

 

原文地址:https://www.cnblogs.com/tszr/p/15376468.html