本節(jié)將闡述在springboot中整合rabbitmq做修。
1、前提約束
- 已經(jīng)安裝rabbitmq
http://www.reibang.com/p/1efa0b1a7aa3
2、操作步驟
- 創(chuàng)建一個(gè)springboot項(xiàng)目钙蒙,作者創(chuàng)建的項(xiàng)目路徑是net.wanho.rabbitmq.springbootrabbitmq
http://www.reibang.com/p/de979f53ad80 - 加入rabbitmq依賴(lài)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
- 修改application.properties
server.port=8088
spring.application.name=boot-rabbitmq
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5762
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
- 在主啟動(dòng)類(lèi)同級(jí)目錄下創(chuàng)建config包苹威,在該包下創(chuàng)建配置類(lèi)RabbitConfig.java
package net.wanho.rabbitmq.springbootrabbitmq.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitmqConfig {
final String email = "queue_email";
final String sms = "queue_sms";
final String exchange_topics = "exchange_topics";
@Bean(exchange_topics)
public Exchange exchange_topics() {
return ExchangeBuilder.topicExchange(exchange_topics).durable(true).build();
}
@Bean(sms)
public Queue sms() {
Queue queue = new Queue(sms);
return queue;
}
@Bean(email)
public Queue email() {
Queue queue = new Queue(email);
return queue;
}
@Bean
public Binding bindingSms(@Qualifier(sms) Queue queue, @Qualifier(exchange_topics) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("inform.#.sms.#").noargs();
}
@Bean
public Binding bindingEmail(@Qualifier(email) Queue queue, @Qualifier(exchange_topics) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("inform.#.email.#").noargs();
}
}
- 在主啟動(dòng)類(lèi)同級(jí)目錄下創(chuàng)建controller包,在該包下創(chuàng)建配置類(lèi)ProducerController.java
package net.wanho.rabbitmq.springbootrabbitmq.controller;
import net.wanho.rabbitmq.springbootrabbitmq.config.RabbitmqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class ProducerController {
@Resource
RabbitTemplate rabbitTemplate;
@GetMapping("/rabbitmq/producer/sms")
public String sendSms() {
String message = "sms to user";
rabbitTemplate.convertAndSend(RabbitmqConfig.exchange_topics, "inform.sms.email", message);
System.out.println("Send Message is:'" + message + "'");
return "send success";
}
@GetMapping("/rabbitmq/producer/email")
public String sendEmail() {
String message = "email to user";
rabbitTemplate.convertAndSend(RabbitmqConfig.exchange_topics, "inform.sms.email", message);
System.out.println("Send Message is:'" + message + "'");
return "send success";
}
}
- 在主啟動(dòng)類(lèi)同級(jí)目錄下創(chuàng)建listener包办悟,在該包下創(chuàng)建配置類(lèi)ReceiveListener.java
package net.wanho.rabbitmq.springbootrabbitmq.listener;
import com.rabbitmq.client.Channel;
import net.wanho.rabbitmq.springbootrabbitmq.config.RabbitmqConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class ReceiveListener {
@RabbitListener(queues = {RabbitmqConfig.email})
public void receive_email(String msg, Message message, Channel channel) {
System.out.println(msg);
}
@RabbitListener(queues = {RabbitmqConfig.sms})
public void receive_sms(String msg, Message message, Channel channel) {
System.out.println(msg);
}
}
- 測(cè)試
啟動(dòng)主啟動(dòng)類(lèi)尘奏,在瀏覽器中輸入以下url:
http://localhost:8088/rabbitmq/producer/email
http://localhost:8088/rabbitmq/producer/sms
我們便能看到rabbitmq的topics模式的結(jié)果。