Confirm 模式
添加mq工具类
package com.itcast.unitl; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.IOException; import java.util.concurrent.TimeoutException; public class MQConnectionUtils { public static com.rabbitmq.client.Connection newConnection() throws IOException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.setUsername("admin_yushengjun"); factory.setPassword("123456"); factory.setPort(5672); factory.setVirtualHost("/admin_host"); com.rabbitmq.client.Connection connection = factory.newConnection(); return connection; } }
1.生产者
Maven环境依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies>
<!-- springboot-web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 添加springboot对amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!--fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency> </dependencies> application.yml
|
spring: rabbitmq: ####连接地址 host: 127.0.0.1 ####端口号 port: 5672 ####账号 username: guest ####密码 password: guest ### 地址 virtual-host: / |
交换机绑定队列
@Component public class FanoutConfig {
// 邮件队列 private String FANOUT_EMAIL_QUEUE = "fanout_eamil_queue";
// 短信队列 private String FANOUT_SMS_QUEUE = "fanout_sms_queue"; // 短信队列 private String EXCHANGE_NAME = "fanoutExchange";
// 1.定义队列邮件 @Bean public Queue fanOutEamilQueue() { return new Queue(FANOUT_EMAIL_QUEUE); }
@Bean public Queue fanOutSmsQueue() { return new Queue(FANOUT_SMS_QUEUE); }
// 2.定义交换机 @Bean FanoutExchange fanoutExchange() { return new FanoutExchange(EXCHANGE_NAME); }
// 3.队列与交换机绑定邮件队列 @Bean Binding bindingExchangeEamil(Queue fanOutEamilQueue, FanoutExchange fanoutExchange) { return BindingBuilder.bind(fanOutEamilQueue).to(fanoutExchange); }
// 4.队列与交换机绑定短信队列 @Bean Binding bindingExchangeSms(Queue fanOutSmsQueue, FanoutExchange fanoutExchange) { return BindingBuilder.bind(fanOutSmsQueue).to(fanoutExchange); } } |
生产者投递消息
@Component public class FanoutProducer { @Autowired private AmqpTemplate amqpTemplate;
public void send(String queueName) { String msg = "my_fanout_msg:" + new Date(); System.out.println(msg + ":" + msg); amqpTemplate.convertAndSend(queueName, msg); } } |
控制层调用代码
@RestController public class ProducerController { @Autowired private FanoutProducer fanoutProducer;
@RequestMapping("/sendFanout") public String sendFanout(String queueName) { fanoutProducer.send(queueName); return "success"; } } |
消费者
Maven环境依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies>
<!-- springboot-web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 添加springboot对amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!--fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency> </dependencies> |
邮件消费者
@Component @RabbitListener(queues = "fanout_eamil_queue") public class FanoutEamilConsumer { @RabbitHandler public void process(String msg) throws Exception { System.out.println("邮件消费者获取生产者消息msg:" + msg); } } |
短信消费者
@Component @RabbitListener(queues = "fanout_sms_queue") public class FanoutSmsConsumer { @RabbitHandler public void process(String msg) { System.out.println("短信消费者获取生产者消息msg:" + msg); } } |
application.yml
spring: rabbitmq: ####连接地址 host: 127.0.0.1 ####端口号 port: 5672 ####账号 username: guest ####密码 password: guest ### 地址 virtual-host: /admin server: port: 8081 |