springboot 使用rabbitmq 入门例子

安装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等请看下一篇

### Spring Boot集成RabbitMQ进行消息传递 #### 一、引入依赖 为了使Spring Boot项目能够与RabbitMQ交互,需在项目的`pom.xml`文件中加入如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 此操作简化了与AMQP协议兼容的消息中间件如RabbitMQ之间的连接过程[^1]。 #### 二、配置application.yml 接着,在`application.yml`或`.properties`文件内指定RabbitMQ的相关属性。以下是基于YAML格式的一个实例化配置片段: ```yaml spring: rabbitmq: host: localhost # RabbitMQ服务主机名/IP地址 port: 5672 # 默认端口 username: guest # 登录账号 password: guest # 密码 virtual-host: / template: retry: enabled: true # 开启重试机制 max-attempts: 3 # 设置最大尝试次数 listener: simple: concurrency: 3 # 并发消费者数量下限 max-concurrency: 10 # 上限 acknowledge-mode: manual # 手动应答模式 prefetch: 1 # 每次预取一条未处理的信息 ``` 上述配置不仅涵盖了基本的身份验证信息,还包含了关于错误恢复策略以及性能调优方面的设定[^4]。 #### 三、定义消息生产者 创建一个用于向队列发送消息的服务类。这里给出一段简单的Java代码作为示范: ```java import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MessageProducer { private final RabbitTemplate rabbitTemplate; @Autowired public MessageProducer(RabbitTemplate rabbitTemplate){ this.rabbitTemplate = rabbitTemplate; } /** * 发送字符串形式的消息到默认交换机下的特定路由键对应的队列里 */ public void sendMessage(String queueName, String messageBody){ System.out.println("Sending message..."); rabbitTemplate.convertAndSend("",queueName,messageBody); System.out.println("Message sent."); } } ``` 这段程序利用了@Autowired注入的方式获取到了核心组件`RabbitTemplate`,并通过它实现了消息的封装与传输功能。 #### 四、构建消息监听器(Consumer) 最后一步是要建立消费端逻辑来接收来自队列的数据流。下面是一个典型的消费者实现方式: ```java import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener; import org.springframework.stereotype.Component; @Component public class MessageReceiver implements ChannelAwareMessageListener { @Override public void onMessage(Message message, Channel channel) throws Exception { byte[] body = message.getBody(); try{ // 处理接收到的消息体... long deliveryTag = message.getMessageProperties().getDeliveryTag(); // 成功后手动确认已成功消费该条目 channel.basicAck(deliveryTag , false ); }catch(Exception e){ // 出现异常时拒绝这条记录,并将其重新入队等待下次被其他节点拾起 channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); } } } ``` 在这个例子中,当有新数据到达目标队列时会触发`onMessage()`方法执行相应的业务流程;同时支持自定义异常捕获路径以便于灵活应对各种意外情况的发生[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值