MQ

xss大约 3 分钟MQMQ

@SpringBootTest
class Springboot3ApplicationTests {
@Resource
DataSource dataSource;

@Resource
IUserService userService;

@Resource
RedisTemplate<String,Object> redisTemplate;

// spring MQ --------------------------------------------

//RabbitTemplate为我们封装了大量的RabbitMQ操作,已经由Starter提供,因此直接注入使用即可
@Resource
RabbitTemplate template;

@Test
void publisher() {
    //使用convertAndSend方法一步到位,参数基本和之前是一样的
    //最后一个消息本体可以是Object类型,真是大大的方便
    template.convertAndSend("amq.direct", "my-xss", "Hello World!");
}

@Test
void publisher1() {
    //会等待消费者消费然后返回响应结果
    Object res = template.convertSendAndReceive("amq.direct", "my-xss", "Hello World!");
    System.out.println("收到消费者响应:"+res);
}

@Test
void publisher2() {
    //会等待消费者消费然后返回响应结果
    Object res = template.convertSendAndReceive("amq.direct", "my-xss", new User());
    System.out.println("收到消费者响应:"+res);
}

// java ---------------------

@Test
void contextLoadMQpublisher() {

    //使用ConnectionFactory来创建连接
    ConnectionFactory factory = new ConnectionFactory();

    //设定连接信息,基操
    factory.setHost("192.168.80.131");
    factory.setPort(5672);  //注意这里写5672,是amqp协议端口
    factory.setUsername("admin");
    factory.setPassword("admin123");
    factory.setVirtualHost("/test");

    //创建连接
    try (Connection connection = factory.newConnection();
         Channel channel = connection.createChannel() ){  //通过Connection创建新的Channel
            //声明队列,如果此队列不存在,会自动创建
            channel.queueDeclare("xss", true, false, false, null);
            //将队列绑定到交换机
            channel.queueBind("xss", "amq.direct", "my-xss");
            //发布新的消息,注意消息需要转换为byte[]
            channel.basicPublish("amq.direct", "my-xss", null, "Hello World!".getBytes());

    }catch (Exception e){
        e.printStackTrace();
    }
}


@Test
void contextLoadMQRabbitListener() throws IOException, TimeoutException {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("192.168.80.131");
    factory.setPort(5672);
    factory.setUsername("admin");
    factory.setPassword("admin123");
    factory.setVirtualHost("/test");

    //这里不使用try-with-resource,因为消费者是一直等待新的消息到来,然后按照
    //我们设定的逻辑进行处理,所以这里不能在定义完成之后就关闭连接
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    //创建一个基本的消费者
    channel.basicConsume("xss", false, (s, delivery) -> {

        System.out.println(new String(delivery.getBody()));

        //basicAck是确认应答,第一个参数是当前的消息标签,后面的参数是
        //是否批量处理消息队列中所有的消息,如果为false表示只处理当前消息
        //channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

        //basicNack是拒绝应答,最后一个参数表示是否将当前消息放回队列,如果
        //为false,那么消息就会被丢弃
        channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, true);


        //跟上面一样,最后一个参数为false,只不过这里省了
        //channel.basicReject(delivery.getEnvelope().getDeliveryTag(), false);


    }, s -> {});
}













@Test
void contextLoadp() {
    LambdaQueryWrapper<User> userWrapper=new LambdaQueryWrapper<>();
    userWrapper.eq(User::getId,1);
    System.out.println(userService.getOne(userWrapper));
}



@Test
void contextLoadsp() {

    FastAutoGenerator
            .create(new DataSourceConfig.Builder(dataSource))
            .globalConfig(builder -> {
                builder.author("lbw");              //作者信息,一会会变成注释
                builder.commentDate("2024-01-01");  //日期信息,一会会变成注释
                builder.outputDir("src/main/java"); //输出目录设置为当前项目的目录
            })
            //打包设置,这里设置一下包名就行,注意跟我们项目包名设置为一致的
            .packageConfig(builder -> builder.parent("com.example"))
            .strategyConfig(builder -> {
                //设置为所有Mapper添加@Mapper注解
                builder
                        .mapperBuilder()
                        .mapperAnnotation(Mapper.class)
                        .build();
            })
            .execute();

}

}

Loading...