RabbitMq整合SSM

rabbitmq,目前比较火的一个MQ消息队列。他有以下特点:

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括:

  1. 可靠性(Reliability)
    RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。

  2. 灵活的路由(Flexible Routing)
    在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。

  3. 消息集群(Clustering)
    多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。

  4. 高可用(Highly Available Queues)
    队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

  5. 多种协议(Multi-protocol)
    RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。

  6. 多语言客户端(Many Clients)
    RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。

  7. 管理界面(Management UI)
    RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。

  8. 跟踪机制(Tracing)
    如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。

  9. 插件机制(Plugin System)
    RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件

下面教大家一下与spring的整合使用

整合

1.加入pom依赖


		    org.springframework.amqp
		    spring-rabbit
		    1.3.5.RELEASE

2.编写rabitmq.properties配置文件

mq.host=106.15.202.0
mq.username=root
mq.password=root
mq.port=5672

3.编写spring-rabbitmq配置文件




    
 
	
	
 
	
	
 
 
 
	
	
	
	
	
	
		
			
			
			
			
		
	 
	
	
	  
		      
		          
		          
		          
		      
	
	
    
    
       
           
           
           
		
    
 
 
	
	
	
	
	
	
	
	     
	
	
	
	     
	
	
	     
	
 

   	
      
  

4.在spring主配置文件中引入刚刚添加的配置文件

RabbitMq整合SSM_第1张图片

5.编写消费者

package com.rabbitmq;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;

import com.rabbitmq.client.Channel;

/**
 * 功能概述 消息接收
 * @author chase
 *
 */
public class Consumor  implements ChannelAwareMessageListener{

    /**
     * message 消息实体
     * Channel 当前通道
     */
    public void onMessage(Message message, Channel channel) throws Exception {
        // TODO Auto-generated method stub
        String msg=  new String (message.getBody(),"utf-8");
        //消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息
        /*channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);*/
        //ack返回false,并重新回到队列,api里面解释得很清楚
        /*channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);*/
        //true拒绝消息  false确认接受到消息
        channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
        System.out.println("消费者1号消费掉了:"+msg+"------->>>>>");

    }    
}

6.编写Controller类用于发送消息

package com.rabbitmq;

import java.util.HashMap;
import java.util.Map;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;

@RestController
@RequestMapping("/send")
public class SendMsgController {

	@Autowired
	private AmqpTemplate amqpTemplate;
	
	
	@RequestMapping("/sendMsg")
	public String sendAmqbMsg(Model model,@RequestParam(value="msg",defaultValue="hello world!!!")String msg){
		if(model!=null&&!"".equals(msg)){
			amqpTemplate.convertAndSend("mq.asdfExChange", "mq.asdf.send", msg);
		}else{
			amqpTemplate.convertAndSend("mq.asdfExChange", "mq.asdf.send", "hello world");
		}
		return "success";
	}
	@RequestMapping("/sendMsg2")
	public String sendAmqbMsg2(Model model,@RequestParam(value="msg",defaultValue="hello world!!!")String msg){
		if(model!=null&&!"".equals(msg)){
			amqpTemplate.convertAndSend("delayed_message_exchange","","这个世界很奇妙!!!");
		}else{
			amqpTemplate.convertAndSend("delayed_message_exchange","", "这个世界很奇妙");
		}
		return "success";
	}
	@RequestMapping("/sendMsg3")
	public String sendAmqbMsg3(Model model,@RequestParam(value="msg",defaultValue="hello world!!!")String msg){
		if(model!=null&&!"".equals(msg)){
			amqpTemplate.convertAndSend("mq.qwerExChange", "mq.qwer.send", "神奇的世界!!!");
		}else{
			amqpTemplate.convertAndSend("mq.qwerExChange", "mq.qwer.send", "神奇的世界");
		}
		return "success";
	}

}

7.添加到tomcat中,运行项目测试

输入地址请求Controller

查看结果

RabbitMq整合SSM_第2张图片

到这里就已经成功啦!!!

附上完整案例下载地址:https://download.csdn.net/download/lzmlzmlzm268/10662803

 

你可能感兴趣的:(mq)