springboot与activityMQ的快速搭建和部署小结

目前,很多项目,基本上发邮件,语音验证都在用这类的技术,甚至所有的异步操作都可以这样做。即使服务器宕机了,只要MQ服务还活着,下次项目服务启动后,还会继续执行下去。比如发邮件,还会接着发,不会出现重复。但是,也有很小的几率队列丢失,但是瑕不掩瑜,MQ作为一个中间组件,确实很好用

底层和术语简介:

JMS(Java Message Service)即java的消息服务,基于JVM消息代理的规范,对于ActivityMQ,是一个JMS消息代理的一个实现,就跟hibernate跟Jpa的关系一样(这货用Java开发的),本次演示使用这个

另外AMQP(Advanced Message Queuing Protocol),也是一个消息代理的规范,它不仅兼容JMS,还支持跨语言平台。它的主要实现就有ActivityMQ (这货是用Erlang开发的),下次演示使用这个

1,准备工作

1. 本实例所使用到的工具(软件和硬件)

  1. docker
  2. sts
  3. linux服务器一台(centOS 7.0)

略去新建项目的步骤,还用上次的项目,对于docker部署容器在这里不做演示,效果如下,端口说明:

61616 为消息代理接口 ,8161 为管理界面(springboot强大的一点是可以在程序中直接内嵌activityMQ,只需要在pom文件中加上以下代码,不需要安装这个,但是这个如果服务宕机了,也就没了。而且也无法看到图形化界面,在这里不支持这样做

		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-broker</artifactId>
		</dependency>

使用docker安装成功后的效果如下:

输入图片说明输入图片说明

点击Manage ActiveMQ broker 经行登录操作(默认管理员账户密码为admin/admin)

2,代码部分

Spring对JMS的支持来自于:spring-jms,并提供了jmsTemplate来发送消息 Springboot使用sping.activemq的前缀来配置起连接属性

不过springboot都是有默认配置的,比如:

  • spring.activemq.broker-url默认的是localhost:8161
  • spring.activemq.in-memory默认是true,
  • spring.activemq.pooled默认是false

输入图片说明

另外,在pom。xml文件中加上依赖:

		<!-- activeMQ所需要的依赖  start-->
                <!-- spring对jms的支持-->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
		</dependency>
                <!-- activeMQ客户端-->
		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-client</artifactId>
		</dependency>
		<!-- activeMQ所需要的依赖  end-->

对activeMQ不多做介绍,篇幅不够

在这里,先定义一个生产者(发送消息者)的类,这个类需要实现org.springframework.jms.core.MessageCreator:

package com.lijunhao.activemq;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.core.MessageCreator;

/**
 * 
 * @author Administrator
 * 测试所要发送的msg
 */
public class MyMsg implements MessageCreator{

	@Override
	public Message createMessage(Session session) throws JMSException {
		return session.createTextMessage("后端第一大帅哥!!");
	}
}

还有一个目的地类(所谓的消费者),这个类需要在方法上制定@JmsListener(destination= "my-mudidi")目的地是哪个

package com.lijunhao.activemq;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
 * 接收者(目的地)
 * @author Administrator
 * 
 */
@Component
public class MyReceiver {
	
	/**
	 * 这个是要监听的目的地方法,添加@JmsListener注解
	 * @param msg
	 */
	@JmsListener(destination= "my-mudidi")
	public void receiverMsg(String msg){
		System.out.println("来,大声告诉我,我就是:"+msg);
	}
}

接下来,照旧,在controller中做测试

   //这个可以直接注入
   @Autowired
	private JmsTemplate jmsTemplate;
	/**
	 * 测试activeMQ
	 * @return
	 */
	@RequestMapping(value="/dashuaige")
	public String getTestActiveMQ(){
		/**
		 * 这个方法第一个参数是目的地。就是消费者
		 * 第二个参数是一个类 MessageCreator,这个就是MyMsg那个implements MessageCreator的类
		 */
		System.out.println("准备开始发送到activeMQ  --START");
		jmsTemplate.send("my-mudidi", new MyMsg());
		System.out.println("准备开始发送到activeMQ  --END");
		return "index";
	}

控制台结果如下:

输入图片说明

而管理控制台的结果

发送前(为了做测试,开始是有了2条消息的),可以看到queues的name是my-mudidi:

输入图片说明

发送后:

输入图片说明

转载于:https://my.oschina.net/lijunhao2016/blog/733143

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值