jar
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
</dependency>
yml 配置文件
spring:
rabbitmq:
host: 192.168.10.1
port: 30002
username: rabbitmq
password: rabbitmq
生产者
配置类
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
public class RabbitMQConfig {
public static final String EXCHANGE_FANOUT_PUSH = "exchange_fanout_push_data";
public final static String UPDATE = "queryUpdate";
public final static String DELETE = "queryDelete";
public final static String PUSH_MESSAGE = "pushMessage";
public final static String PUSH_MESSAGE_SCC = "pushMessageScc";
public final static String PUSH_DATA_OPEN = "pushDataOpen";
@Bean
public FanoutExchange EXCHANGE_FANOUT_PUSH() {
log.info("广播模式交换机实例创建成功");
return new FanoutExchange(EXCHANGE_FANOUT_PUSH);
}
@Bean(UPDATE)
public Queue queryUpdate() {
return new Queue(UPDATE,true);
}
@Bean(DELETE)
public Queue queryDelete() {
return new Queue(DELETE,true);
}
@Bean(PUSH_MESSAGE)
public Queue PUSH_MESSAGE() {
log.info("交换机-路由创建成功");
return new Queue(PUSH_MESSAGE,true);
}
@Bean(PUSH_DATA_OPEN)
public Queue PUSH_DATA_OPEN() {
log.info("交换机-路由 PUSH_DATA_OPEN 创建成功");
return new Queue(PUSH_DATA_OPEN,true);
}
@Bean(PUSH_MESSAGE_SCC)
public Queue PUSH_MESSAGE_SCC() {
log.info("交换机-路由PUSH_MESSAGE_SCC创建成功");
return new Queue(PUSH_MESSAGE_SCC,true);
}
@Bean
public Binding pushMessageZSGToExchange() {
log.info("【【【绑定队列一到交换机成功 PUSH_MESSAGE】】】");
return BindingBuilder.bind(PUSH_MESSAGE()).to(EXCHANGE_FANOUT_PUSH());
}
@Bean
public Binding pushMessageSCCToExchange() {
log.info("【【【绑定队列一到交换机成功 PUSH_MESSAGE_SCC】】】");
return BindingBuilder.bind(PUSH_MESSAGE_SCC()).to(EXCHANGE_FANOUT_PUSH());
}
@Bean
public Binding pushDataOpenToExchange() {
log.info("【【【绑定队列一到交换机成功 PUSH_DATA_OPEN】】】");
return BindingBuilder.bind(PUSH_DATA_OPEN()).to(EXCHANGE_FANOUT_PUSH());
}
}
推送类
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.scheduling.annotation.Async;
import org.zsdy.RabbitMQ.RabbitMQConfig;
import org.zsdy.data.api.model.PushMessageDTO;
import javax.annotation.Resource;
@Slf4j
public class PushSenderController {
@Resource
AmqpTemplate rabbitmqTemplate;
@Async
public void pushMessage(PushMessageDTO pushMessage){
if(pushMessage!=null){
String message = JSONObject.toJSONString(pushMessage);
log.info("【开始推送业务数据】 ={}",message);
rabbitmqTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_FANOUT_PUSH,"",message);
}
}
}
消费类
@Slf4j
@Component
public class Receiver {
@RabbitListener(queues = RabbitMQConfig.PUSH_MESSAGE )
public void pushMessage(String messageJsonStr) {
log.info("接收变动事件【{}】", messageJsonStr);
}
}
}