您的位置:首页 > 编程语言 > Java开发

springboot+rabbitmq的整合

2018-08-01 10:20 459 查看

1.queue的代码整合:什么意思呢?通俗的讲就是当一处生产只有一处消费。
2.exchange的整合:俗称广播,就是一处生产多处收到消息。

第一种的queue是可以负载均衡的。会平均分配到每一个消费者。
第二种类似于发送邮件,消息指定发送的人都会收到邮件。

好了,我不爱说文书卷的概念,就喜欢simple demo和quick start。干货,干货!!

代码有能运行的springboot为基础的整合,作为程序员如果整不出一个springboot,就别谈rabbitmq了。

1.queue的整合

@RequestMapping("/send")
public User send(){
User user = new User();
user.setName("张三");
user.setId(1L);
user.setAge(12);
user.setSex(1);
rabbitTemplate.convertAndSend("hailang",user);
return user;
}

实体bean

public class User implements Serializable{

private Long id;
private String name;
private Integer age;
private Integer sex;

public User(){};

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Integer getSex() {
return sex;
}

public void setSex(Integer sex) {
this.sex = sex;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
@Component
public class Receiver {

@RabbitListener(queues = "hailang")
public void receiver1(User user){
System.out.println("hailang1:"+user);
}
}

queue的代码测试执行接口,控制台看到消费的结果。
而且读过底层代码发现,类都是通过反射发送,不用考虑序列化问题。框架高度集成方便我们的开发。

2.广播的集成

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FanoutRabbitConfig {

@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");
}

@Bean
FanoutExchange fanoutExchange() {
return new FanoutExchange("fanoutExchange");
}

@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);
}
}

发送消息
注意发送方法第一个参数

@RequestMapping("/send/group")
public User sendGroup(){
User user = new User();
user.setName("张三");
user.setId(1L);
user.setAge(12);
user.setSex(1);
rabbitTemplate.convertAndSend("fanoutExchange","",user);
return user;
}

接收消息

import com.demo.model.User;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = "fanout.A")
public class Receiver1 {

@RabbitHandler
public void receiver4(User user){
System.out.println("group1:"+user);
}

}
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = "fanout.B")
public class Recevier2 {

@RabbitHandler
public void receiver4(User user){
System.out.println("group2:"+user);
}
}

浏览器,执行controller的url,就可以看到同时得到消费。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: