1、所需jar包(maven 依赖)
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.6.3.RELEASE</version>
</dependency>
2、spring 的xml中配置RabbitMQ
<!--配置connection-factory,指定连接rabbit server参数 -->
<rabbit:connection-factory id="connectionFactory"
username="${RabbitMQ.username}" password="${RabbitMQ.password}" host="${RabbitMQ.host}" port="${RabbitMQ.port}" />
<!--声明多个消息队列 queue -->
<rabbit:queue id="queue1" name="queue1" durable="true" auto-delete="false" exclusive="false" />
<rabbit:queue id="queue2" name="queue2" durable="true" auto-delete="false" exclusive="false" />
<rabbit:queue id="queue3" name="queue3" durable="true" auto-delete="false" exclusive="false" />
<!--定义rabbit template用于数据的接收和发送 -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
exchange="exchangeTest" />
<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 -->
<rabbit:admin connection-factory="connectionFactory" />
<!-- 消息接收者 -->
<bean id="messageReceiver" class="com.jpxcw.rabbitmq.MessageConsumer"></bean>
<!-- queue litener 观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象-->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener queues="queue1,queue2,queue3" ref="messageReceiver"/>
</rabbit:listener-container>
<!-- 定义direct exchange,绑定queue -->
<rabbit:direct-exchange name="exchangeTest" durable="true" auto-delete="false">
<rabbit:bindings>
<rabbit:binding queue="queue1" key="queueTestKey1"></rabbit:binding>
<rabbit:binding queue="queue2" key="queueTestKey2"></rabbit:binding>
<rabbit:binding queue="queue3" key="queueTestKey3"></rabbit:binding>
</rabbit:bindings>
</rabbit:direct-exchange>
3、生产者
import javax.annotation.Resource;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.stereotype.Service;
@Service
public class MessageProducer {
@Resource
private AmqpTemplate amqpTemplate;
public void sendMessage(String queueKey,Object message){
amqpTemplate.convertAndSend(queueKey,message);
}
}
4、消费者
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
public class MessageConsumer implements MessageListener{
@Override
public void onMessage(Message message) {
System.out.println(message);
}
}
5、接口测试
@RestController
public class Controller {
@Autowired
private MessageProducer mqProducer;
final String queue_key = "queueTestKey1";
@RequestMapping(value="/rbmq", method = RequestMethod.GET)
public void send(){
String mq="spring and rabmp!";
mqProducer.sendMessage(queue_key,mq);
}
}
6、结果输出
(Body:'spring and rabmp!' MessageProperties [headers={}, timestamp=null, messageId=null, userId=null, receivedUserId=null, appId=null, clusterId=null, type=null, correlationId=null, correlationIdString=null, replyTo=null, contentType=text/plain, contentEncoding=UTF-8, contentLength=0, deliveryMode=null, receivedDeliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=false, receivedExchange=exchangeTest, receivedRoutingKey=queueTestKey1, receivedDelay=null, deliveryTag=3, messageCount=0, consumerTag=amq.ctag-OS16HeTstwO8mkfq9XnC8Q, consumerQueue=queue1])