springBoot集成rabbitmq 之工作模式(Work queues)

springBoot集成rabbitmq 之工作模式(Work queues)

springBoot整合rabbitmq的例子: https://blog.youkuaiyun.com/weixin_45730866/article/details/128971917,建议先看。

consumer服务

依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.37</version>
        </dependency>

配置类


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

@Configuration
public class RabbitWorkQueuesConfig {

    /**
        * Queue 可以有4个参数
     *      1.name          队列名
     *      2.durable       持久化消息队列 ,rabbitmq重启的时候不需要创建新的队列 默认true
     *      3.auto-delete   表示消息队列没有在使用时将被自动删除 默认是false
     *      4.exclusive     表示该消息队列是否只在当前connection生效,默认是false
     */
    @Bean
    public Queue createWorkQueuesQueue() {
        return new Queue("WorkQueues",true);
    }

}

接收者

import com.alibaba.fastjson.JSON;
import com.lideru.consumer.pojo.User;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; 
import java.util.Date; 
@Component
@RabbitListener(queues = "WorkQueues")
public class WorkQueuesReceiver {
    @Value("${server.port}")
    private int port; 
    @RabbitHandler
    public void process(String user) {
        User u = JSON.parseObject(user,User.class);
        System.out.println(port+ " 服务接收 : " + u +","+ new Date());
    }
}

producer服务

依赖和上面consumer服务一样


发送者

import com.alibaba.fastjson.JSON;
import com.lideru.producer.pojo.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; 
import java.util.Date;
import java.util.UUID;

@Component
public class WorkQueuesSender { 

	@Autowired
	private RabbitTemplate rabbitTemplate;

	public void send(int i) {
		CorrelationData uuId = new CorrelationData(UUID.randomUUID().toString());
		User user = new User("tom", 18 ,"man");
		String u = JSON.toJSONString(user);
		rabbitTemplate.convertAndSend("WorkQueues",(Object) u,uuId);
		System.out.println("发送成功,"+new Date()+","+u);
	}
}

测试类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; 
@RequestMapping
@RestController
public class WorkQueuesTestController  {
    @Autowired
    private WorkQueuesSender workQueuesSender; 
    @GetMapping("workQueuesTest")
    public String workQueuesTest() throws Exception {
        for (int j = 0; j < 10; j++) {
            workQueuesSender.send(j);
        }
        return "workQueuesTestOK";
    }
}

启动动producer服务,访问127.0.0.1:8080/workQueuesTes,返回结果是workQueuesTestOK,控制台结果如下:

发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom0","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom1","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom2","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom3","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom4","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom5","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom6","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom7","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom8","sex":"man"}
发送成功,Mon Feb 13 09:55:10 CST 2023,{"age":18,"name":"tom9","sex":"man"}

然后我们再启动consumer服务,consumer的控制台结果如下:

8081 服务接收 : User(name=tom0, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom1, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom2, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom3, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom4, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom5, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom6, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom7, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom8, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023
8081 服务接收 : User(name=tom9, age=18, sex=man),Mon Feb 13 09:55:10 CST 2023

到这里证明已经成功了。

然后我们再启动一个consumer服务,此时启动了两个consumer服务。再请求一次127.0.0.1:8080/workQueuesTes,两个consumer服务打印分别是:

8081 服务接收 : User(name=tom0, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8081 服务接收 : User(name=tom2, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8081 服务接收 : User(name=tom4, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8081 服务接收 : User(name=tom6, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8081 服务接收 : User(name=tom8, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8082 服务接收 : User(name=tom1, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8082 服务接收 : User(name=tom3, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8082 服务接收 : User(name=tom5, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8082 服务接收 : User(name=tom7, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023
8082 服务接收 : User(name=tom9, age=18, sex=man),Mon Feb 13 09:59:59 CST 2023

看到上面的结果,证明在两个服务中轮询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值