SpringBoot: 整合消息服务之JMS

JMS:

 JMS即JavaMessageService:Java消息服务

其通过统一的Java API层面的标准,使得多个客户端可以通过JMS进行交互,大部分消息中间件提供商都对JMS提供支持。JMS和ActiveMQ的关系就像JDBC和JDBC驱动的关系。

JMS包括2种消息类型:

  • 点对点
  • 发布者/订阅者

且JMS仅支持Java平台

由于JMS是一套标准,所以SpringBoot整合JMS必然是整合JMS的某一个实现。

ActiveMQ:

Apache ActiveMQ是一个开源的消息中间件,完全支持JMS 1.1规范,支持多种编程语言(C,C++,C#,Delphi,Erlang,AdobeFlash,Haskell,Java,Javascript,Perl,PHP,Pike,Python,Ruby)和协议(OpenWire,REST,STOMP,WS-Notification,MQTT,XMPP,AMQP)

且其提供了集群支持。

ActiveMQ安装:(centos7)

1.安装Java环境:

2.下载ActiveMQ:

wget http://mirrors.hust.edu.cn/apache//activemq/5.15.12/apache-activemq-5.15.12-bin.tar.gz

3.解压下载的文件:

tar -zxvf apache-activemq-5.15.12-bin.tar.gz 

4.启动ActiveMQ:

然后启动成功后,关闭Centos防火墙,在浏览器中输入地址:默认端口8161

当然,这里通过的是回环地址访问的,也可以通过网络ip访问,查看centosip:

看到上述页面代表启动成功了。


SpringBoot整合ActiveMQ

1.添加ActiveMQ依赖:

2.application.properties中进行配置:

broker地址默认端口是61616,

trust-all是配置信任所有的包,这个配置是为了支持发送对象消息。

最后配置了ActiveMQ的用户名和密码

3.配置类中提供一个消息队列Bean,该实例由ActiveMQ提供‘;

package com.yinlei.activemq;

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import javax.jms.Queue;

@SpringBootApplication
public class ActivemqApplication {

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

    @Bean
    Queue queue(){
        return new ActiveMQQueue("amq");
    }

}

4.创建一个JMS组件来完成消息的发送和接收:

注意导包:

package com.yinlei.activemq;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;

import javax.jms.Queue;
import java.io.Serializable;
import java.util.Date;

/**
 * JMS组件来完成消息的发送和接收
 */
@Component
public class JMSComponent {
    /**
     * Spring提供的一个JMS消息发送模板,方便进行消息发送
     */
    @Autowired
    JmsMessagingTemplate messagingTemplate;

    @Autowired
    Queue queue;

    public void send(Message message){
        //消息发送方法,参数1 是消息队列,参数2 是消息内容
        messagingTemplate.convertAndSend(this.queue,message);
    }

    /**
     * 注解表示对应的方法是1个消息消费者,消息消费者订阅的消息destionation为amq
     * @param message
     */
    @JmsListener(destination = "amq")
    public void receive(Message message){
        System.out.println("收到了:"+message);
    }
}

@Getter
@Setter
class Message implements Serializable{
    private String content;
    private Date date;
}

5.消息发送测试:

发布了356 篇原创文章 · 获赞 67 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_39969226/article/details/104987322