码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot整合ActiveMQ

时间:2018-02-25 13:12:50      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:web   min   ddd   return   ack   one   amp   时间戳   private   

 

先建工程

技术分享图片

..

技术分享图片

..

技术分享图片

..

技术分享图片

..

技术分享图片

..先看一下最终目录结构(实际上核心就是两个类,但是其他的多写写还是没有坏处的)

技术分享图片

消息实体类

技术分享图片
package com.example.demo.domain;

import java.io.Serializable;
import java.util.Date;

public class Message implements Serializable {

    private int id;
    private String from;
    private String to;
    private String text;
    private Date time;

    public Message(int id, String from, String to, String text, Date time) {
        this.id = id;
        this.from = from;
        this.to = to;
        this.text = text;
        this.time = time;
    }

    public Message() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

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

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Date getTime() {
        return time;
    }

    public void setTime(Date time) {
        this.time = time;
    }

    @Override
    public String toString() {
        return "Message{" +
                "id=" + id +
                ", from=‘" + from + ‘\‘‘ +
                ", to=‘" + to + ‘\‘‘ +
                ", text=‘" + text + ‘\‘‘ +
                ", time=" + time +
                ‘}‘;
    }
}
View Code

 

核心:发送类

package com.example.demo.service;

import com.example.demo.domain.Message;
import org.springframework.stereotype.Service;

@Service
public interface MsgService {

    void addMessage(Message message);
}

 

 实现:我们习惯把@Autowired注解在属性上,但是SpringBoot推荐注解在构造函数上

package com.example.demo.service.impl;

import com.example.demo.domain.Message;
import com.example.demo.service.MsgService;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;

import javax.jms.Destination;

@Service
public class MsgServiceImpl implements MsgService {

    private final JmsTemplate jmsTemplate;

    @Autowired
    public MsgServiceImpl(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }


    @Override
    public void addMessage(Message message) {
        Destination destination = new ActiveMQQueue("my-msg");
        jmsTemplate.convertAndSend(destination, message);
    }
}

 

 核心:接受类

package com.example.demo.service;

import com.example.demo.domain.Message;
import org.springframework.stereotype.Service;

import javax.jms.JMSException;

@Service
public interface ReceiveService {

    void receiveMessage(Message message) throws JMSException;
}

 

 实现:

package com.example.demo.service.impl;

import com.example.demo.domain.Message;
import com.example.demo.service.ReceiveService;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

import javax.jms.JMSException;

@Service
public class ReceiveServiceImpl implements ReceiveService {

    @JmsListener(destination = "my-msg")
    @Override
    public void receiveMessage(Message message) throws JMSException {
        System.out.println("收到:" + message);
    }
}

 

 

配置文件:application.yml

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    suffix: .ftl
    charset: UTF-8
    content-type: text/html
    cache: false
  activemq:
    broker-url: tcp://localhost:61616
    user: admin
    password: admin
    pool:
      enabled: false
      max-connections: 50
    packages:
      trust-all: true #不配置此项,会报错  http://activemq.apache.org/objectmessage.html

 

 controller:

package com.example.demo.controller;

import com.example.demo.domain.Message;
import com.example.demo.service.MsgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import java.util.Date;

@RestController
public class ProducerController {

    private final MsgService msgService;

    @Autowired
    public ProducerController(MsgService msgService) {
        this.msgService = msgService;
    }

    @RequestMapping("/index")
    public ModelAndView index(){
        return new ModelAndView("index");
    }

    @RequestMapping("/send")
    public String send(Message message){
        System.out.println("前台:" + message);
        msgService.addMessage(message);
        return "ok";
    }

}

 

类型转换器:这里前台传来的是时间戳,需要转换成Date

package com.example.demo.utils;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class TimeConverter implements Converter<String, Date> {
    @Override
    public Date convert(String str) {
        return new Date(Long.valueOf(str));
    }
}

 

前台:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jms</title>
    <link href="/css/index.css" rel="stylesheet" type="text/css">
    <script src="/script/jquery-3.3.1.min.js"></script>
    <script src="/script/index.js"></script>
    <#--<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>-->
</head>
<body>
    <div class="msg-wrap">
        <div class="form-group">
            <input class="form-control" type="text" name="from" placeholder="发件人">
        </div>
        <div class="form-group">
            <input class="form-control" type="text" name="to" placeholder="收件人">
        </div>
        <div class="form-group">
            <textarea class="textarea" name="text"></textarea>
        </div>
        <div class="form-group">
            <a href="javascript:void(0)" class="btn">发送</a>
        </div>
    </div>
</body>
</html>

 

css

@charset "UTF-8";

.msg-wrap{
    width: 600px;
    margin: 25px auto;
    box-shadow: 0 0 10px #dc143c;
    border: 1px solid #f97991;
    border-radius: 3px;
}
.msg-wrap .form-group{
    margin: 15px;
}
.msg-wrap .form-group .form-control{
    width: 100%;
    height: 30px;
    border: 1px solid #ddd;
    border-radius: 3px;
    text-indent: 8px;
}
.msg-wrap .form-group .textarea{
    display: block;
    font-size: 16px;
    color: #ab1123;
    padding: 8px;
    border: 1px solid #ddd;
    border-radius: 3px;
}

.btn{
    display: inline-block;
    padding: 8px 20px;
    color: #fff;
    background-color: crimson;
    border-radius: 3px;
    border: 1px solid crimson;
    text-decoration: none;
}

 

js

$(function(){
    $(‘.btn‘).click(function(){
        var id = new Date().getDate() + "" + new Date().getMinutes();
        var from = $(‘input[name="from"]‘).val();
        var to = $(‘input[name="to"]‘).val();
        var text = $(‘textarea[name="text"]‘).val();
        var time = new Date().getTime();
        var url = "/send";
        var args = {"id": id, "from": from, "to": to, "text": text, "time": time};
        $.post(url, args, function(data){
            $(‘input[name="from"]‘).val("");
            $(‘input[name="to"]‘).val("");
            $(‘textarea[name="text"]‘).val("");
        });
    });
});

 

最后,运行项目,访问:http://localhost:8080/index

技术分享图片

查看IDEA控制台

技术分享图片

查看ActiveMQ控制台:http://localhost:8161/admin/queues.jsp

技术分享图片

因为我测试了几次,所以有4条消息

 

SpringBoot整合ActiveMQ

标签:web   min   ddd   return   ack   one   amp   时间戳   private   

原文地址:https://www.cnblogs.com/LUA123/p/8468898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!