`
- 浏览:
228721 次
- 性别:
- 来自:
深圳
-
1.TopicRabbitConfig
package com.soft.rabbit.server.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TopicRabbitConfig {
public final static String man = "topic.man";
public final static String woman = "topic.woman";
@Bean
public Queue firstQueue() {
return new Queue(TopicRabbitConfig.man);
}
@Bean
public Queue secondQueue() {
return new Queue(TopicRabbitConfig.woman);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("topicExchange");
}
// 将firstQueue和topicExchange绑定,而且绑定的键值为topic.man
// 这样只要是消息携带的路由键是topic.man,才会分发到该队列
@Bean
Binding bindingExchangeMessage() {
return BindingBuilder.bind(firstQueue()).to(exchange()).with(man);
}
// 将secondQueue和topicExchange绑定,而且绑定的键值为用上通配路由键规则topic.#
// 这样只要是消息携带的路由键是以topic.开头,都会分发到该队列
@Bean
Binding bindingExchangeMessage2() {
return BindingBuilder.bind(secondQueue()).to(exchange()).with("topic.#");
}
}
2.rabbitconfig
package com.soft.rabbit.server.config;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate();
rabbitTemplate.setConnectionFactory(connectionFactory);
// 设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
rabbitTemplate.setMandatory(true);
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
System.out.println("ConfirmCallback: " + "相关数据:" + correlationData);
System.out.println("ConfirmCallback: " + "确认情况:" + ack);
System.out.println("ConfirmCallback: " + "原因:" + cause);
}
});
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange,String routingKey) {
System.out.println("ReturnCallback: " + "消息:" + message);
System.out.println("ReturnCallback: " + "回应码:" + replyCode);
System.out.println("ReturnCallback: " + "回应信息:" + replyText);
System.out.println("ReturnCallback: " + "交换机:" + exchange);
System.out.println("ReturnCallback: " + "路由键:" + routingKey);
}
});
return rabbitTemplate;
}
}
3.TopicService
package com.soft.rabbit.server.service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TopicService {
@Autowired
private AmqpTemplate rabbitTemplate;
public String sendTopicMessage1() {
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "message: MAN";
String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Map<String, Object> manMap = new HashMap<String, Object>();
manMap.put("messageId", messageId);
manMap.put("messageData", messageData);
manMap.put("createTime", createTime);
rabbitTemplate.convertAndSend("topicExchange", "topic.man", manMap);
return "ok";
}
public String sendTopicMessage2() {
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "message: woman is all ";
String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Map<String, Object> womanMap = new HashMap<String, Object>();
womanMap.put("messageId", messageId);
womanMap.put("messageData", messageData);
womanMap.put("createTime", createTime);
rabbitTemplate.convertAndSend("topicExchange", "topic.woman", womanMap);
return "ok";
}
}
4.消费者TopicReceiver
package com.soft.rabbit.client.service;
import java.util.Map;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "topic.man")
public class TopicReceiver {
@RabbitHandler
public void process(Map testMessage) {
System.out.println("TopicManReceiver消费者收到消息 : " + testMessage.toString());
}
}
5.消费者TopicTotalReceiver
package com.soft.rabbit.client.service;
import java.util.Map;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "topic.woman")
public class TopicTotalReceiver {
@RabbitHandler
public void process(Map testMessage) {
System.out.println("TopicTotalReceiver消费者收到消息 : " + testMessage.toString());
}
}
6.生产者bootstrap.yml
#http端口配置
server:
port: 6001
connection-timeout: 5000
tomcat:
max-http-post-size: -1
max-threads: 1000
max-connections: 1000
spring:
application:
name: soft-rabbit-server
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
#消息确认配置项
#确认消息已发送到交换机(Exchange)
publisher-confirms: true
#publisher-confirm-type: correlated
#确认消息已发送到队列(Queue)
publisher-returns: true
# eureka注册中心配置
eureka:
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:7001/eureka/
instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}
prefer-ip-address: true
hostname: ${spring.cloud.client.ip-address}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
rabbit mq入门例子. 使用rabbit mq实现服务器连接,消息发送,接收。
rabbit mq 安装手册,详细介绍了rabbit mq在linux环境下如何安装
连接rabbit mq的简单demo,演示如果连接mq并发送消息接收消息
rabbit mq windows 64 较新,很实用,消息中间件服务端。
spring boot 集成rabbit mq 成功demo,spring boot 集成rabbit mq 成功demo
docker 安裝 rabbit mq 並測試 http://knight-black-bob.iteye.com/blog/2395713
本附件包含Rabbit MQ的安装包以及作者亲自撰写的安装步骤,供大家参考。
Rabbit MQ讲解 和介绍。。。。。。。。。。。。。。。。。。。
更新rabbit mq的demo,演示连接mq并发送消息接收消息 持久化模式、客户端订阅方式、单链接
Rabbit mq教程
Rabbit MQ Server 3.7.24 + Erlang OTP 22.1 for Windows X64 安装文件。 附带安装教程。
Linux 离线安装Rabbit MQ所需环境及安装包, 主要包含ncurses,perl(perl-5.36.0.tar.gz),OpenSSL(openssl-1.1.1i.tar.gz),erlang(otp_src_23.2.tar.gz),rabbitmq(rabbitmq-server-generic-unix-3.8.11....
windows64位操作系统 rabbit mq3.12.4及配套的Erlang/OTP26.0 安装包。官方资源不好下载
各个微服务统一使用spring-cloud-starter-stream-rabbit 为规范各个微服务之间消息队列的交换机、通道、队列、消息投递更加便于识别、扩展和维护特进行以下要求
spring-rabbit-1.5.1.RELEASE.jar, spring-amqp-1.5.1.RELEASE.jar, rabbitmq-client.jar spring-retry-1.1.2.RELEASE.jar 四个包 之前的资源不好意思传错了一个
RabbitMQ消费者代码
本书首先介绍了有关MQ的历史,然后从基本的消息通信原理讲起,带领读者一路探索RabbitMQ的消息通信世界。这当中不仅包含了针对单台RabbitMQ服务器和RabbitMQ集群的讲解,还教导读者如何使用各种工具来进行监控。
消息队列,先进先出
rabbitmq全部安装包,下载后利用其中的文件可以很方便的下载和自己电脑适配的Rabbit MQ,需要注意的是,在下载之前,请保证自己电脑上有c/c++的环境,推介使用visual studio,社区免费版本的就行
Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang