安装rabbitmq就不提了,直接看demo吧
首先是配置
spring.application.name=springboot-rabbitmq
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.virtual-host=/
config配置queues,topic,exchanges等
@Bean
public Queue hellpQueue(){
return new Queue("hello");
}
@Bean
public Queue userQueue() {
return new Queue("user");
}
//===============以下是验证topic Exchange的队列==========
@Bean
public Queue queueMessage() {
return new Queue("topic.message");
}
@Bean
public Queue queueMessages() {
return new Queue("topic.messages");
}
//===============以上是验证topic Exchange的队列==========
//===============以下是验证Fanout Exchange的队列==========
@Bean
public Queue AMessage() {
return new Queue("fanout.A");
}
@Bean
public Queue BMessage() {
return new Queue("fanout.B");
}
@Bean
public Queue CMessage() {
return new Queue("fanout.C");
}
//===============以上是验证Fanout Exchange的队列==========
@Bean
TopicExchange exchange() {
return new TopicExchange("exchange");
}
@Bean
FanoutExchange fanoutExchange() {
return new FanoutExchange("fanoutExchange");
}
/**
* 将队列topic.message与exchange绑定,binding_key为topic.message,就是完全匹配
* @param queueMessage
* @param exchange
* @return
*/
@Bean
Binding bindingExchangeMessage(Queue queueMessage, TopicExchange exchange) {
return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
}
/**
* 将队列topic.messages与exchange绑定,binding_key为topic.#,模糊匹配
* @param queueMessage
* @param exchange
* @return
*/
@Bean
Binding bindingExchangeMessages(Queue queueMessages, TopicExchange exchange) {
return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");
}
@Bean
Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
return BindingBuilder.bind(AMessage).to(fanoutExchange);
}
@Bean
Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(BMessage).to(fanoutExchange);
}
@Bean
Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(CMessage).to(fanoutExchange);
}
简单queues
sender:
@Component
public class HelloSender {
@Autowired
private AmqpTemplate amqpTemplate;
public void send(String msg){
String smsg=msg+new Date();
System.out.println("Sender1 : " + smsg);
this.amqpTemplate.convertAndSend("hello", smsg);
}
}
customer:
@Component
@RabbitListener(queues = "hello")
public class HelloCustomer {
@RabbitHandler
public void process(String hello){
System.out.println("Receiver1 : " + hello);
}
}
如果需要一对多,或者多对多,只需要复制一个customer就可以了,代码一样,就不介绍了
然后就是对象类型的传输:
建一个实体类User,切记实现implements Serializable序列化一下,也可以在方法里序列化,不过比较麻烦
sender:
public void sendUser() {
User user=new User();
user.setName("hzb");
user.setPass("123456789");
System.out.println("user send : " + user.getName()+"/"+user.getPass());
this.amqpTemplate.convertAndSend("user", user);
}
customer:
@Component
@RabbitListener(queues = "user")
public class UserReceiver {
@RabbitHandler
public void process(User user) {
System.out.println("user receive : " + user.getName()+"/"+user.getPass());
}
}
本文章只介绍简单队列,exchanges和topic等请看下一篇