RabbitMQ 五种基本模式demo(Java版本)_java rabbitmq demo-程序员宅基地

技术标签: MQ  中间件  rabbitmq  

RabbitMQ 五种基本模式demo(Java版本)

代码非本人所写,只是将代码稍微做了些改动,在自己的环境中运行起来了,侵删
模型图是这种模式的模型图,并不是代码对应的模型图,仅供参考

前三种模式需要引用的文件

ConnectionUtils.java
创建并设置factory的基本属性,并返回新创建的connection

package test.rabbitmq.rabbitmq.mq5s;

import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class ConnectionUtils {
    
    public static Connection getConnection() throws IOException, TimeoutException {
    
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
        return factory.newConnection();
    }
}

简单模式

模型图
在这里插入图片描述

发送端:Send.java

package test.rabbitmq.rabbitmq.mq5s.mq1;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**简单队列
 * 生产者发送消息
 */
public class Send {
    

    private static final String QUEUE_NAME = "test_simple_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        Connection connection = ConnectionUtils.getConnection();

        Channel channel = connection.createChannel();
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        String msg = "hello simple!!!!!!!!!!!";
        channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
        System.out.println("--send msg;" + msg);
        channel.close();
        connection.close();
    }
}

接收端:Receive.java

package test.rabbitmq.rabbitmq.mq5s.mq1;

import com.rabbitmq.client.*;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消费者获取消息
 */
public class Receive {
    

    private static final String QUEUE_NAME = "test_simple_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        //获取链接
        Connection connection = ConnectionUtils.getConnection();
        //创建通道
        Channel channel = connection.createChannel();
        //队列声明
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        DefaultConsumer consumer = new DefaultConsumer(channel) {
    
            //获取到达的消息
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
                super.handleDelivery(consumerTag, envelope, properties, body);
                String msg = new String(body, "utf-8");
                System.out.println("new api recv:" + msg);
            }
        };

        //监听队列
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

分发模式(轮询分发)

模型图
在这里插入图片描述

发送端:Send.java

package test.rabbitmq.rabbitmq.mq5s.mq2;

import com.rabbitmq.client.*;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;


/**轮询分发
 * \---c1
 * p---Queue----\
 * \---c2
 */
public class Send {
    
    private static final String QUEUE_NAME = "test_work_queue";

    public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
    
        //获取链接
        Connection connection = ConnectionUtils.getConnection();
        //获取channel
        Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        for (int i = 0; i < 100; i++) {
    
            String msg = "hello" + i;

            System.out.println("[WQ ] send:" + msg);
            channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
            Thread.sleep(i * 20);
        }
        channel.close();
        connection.close();
    }
}

接收端01:Receive1.java

package test.rabbitmq.rabbitmq.mq5s.mq2;

import com.rabbitmq.client.*;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive1 {
    
    public static final String QUEUE_NAME = "test_work_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        //创建链接
        Connection connection = ConnectionUtils.getConnection();
        //创建频道
        Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        //定义一个消费者
        Consumer consumer = new DefaultConsumer(channel) {
    
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
                String msg = new String(body, "utf-8");
                System.out.println("[1] Recv msg :" + msg);
                try {
    
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
    
                    e.printStackTrace();
                } finally {
    
                    System.out.println("[1] done");
                }
            }
        };
        boolean autoAck = false;
        channel.basicConsume(QUEUE_NAME, autoAck, consumer);
    }
}

接收端02:Receive2.java

package test.rabbitmq.rabbitmq.mq5s.mq2;

import com.rabbitmq.client.*;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive2 {
    
    public static final String QUEUE_NAME = "test_work_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        //创建链接
        Connection connection = ConnectionUtils.getConnection();
        //创建频道
        Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        //定义一个消费者
        Consumer consumer = new DefaultConsumer(channel) {
    
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
                String msg = new String(body, "utf-8");
                System.out.println("[2] Recv msg :" + msg);
                try {
    
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
    
                    e.printStackTrace();
                } finally {
    
                    System.out.println("[2] done");
                }
            }
        };
        boolean autoAck = false;
        channel.basicConsume(QUEUE_NAME, autoAck, consumer);
    }
}

分发模式(公平分发)

模型图

在这里插入图片描述

发送端:Send.java

package test.rabbitmq.rabbitmq.mq5s.mq3;

import com.rabbitmq.client.*;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**公平分发
 * \---c1
 * p---Queue----\
 * \---c2
 */
public class Send {
    
    private static final String QUEUE_NAME = "test_work_queue";

    public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
    
        //获取链接
        Connection connection = ConnectionUtils.getConnection();
        //获取channel
        Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        /**
         * 每个消费者发送消费之前,消息队列不发送下一个消息到消费者,一次只处理一个消息
         * 限制发送给同一个消费者不得超过一个消息
         */
        int prefetchCount = 1;
        channel.basicQos(prefetchCount);

        for (int i = 0; i < 50; i++) {
    
            String msg = "hello" + i;

            System.out.println("[WQ ] send:" + msg);
            channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
            Thread.sleep(i * 5);
        }
        channel.close();
        connection.close();
    }
}

接收端01:Receive1.java

package test.rabbitmq.rabbitmq.mq5s.mq3;

import com.rabbitmq.client.*;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive1 {
    
    public static final String QUEUE_NAME = "test_work_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        //创建链接
        Connection connection = ConnectionUtils.getConnection();
        //创建频道
        final Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //保证一次只发送一个
        channel.basicQos(1);

        //定义一个消费者
        Consumer consumer = new DefaultConsumer(channel) {
    
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
                String msg = new String(body, "utf-8");
                System.out.println("[1] Recv msg :" + msg);
                try {
    
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
    
                    e.printStackTrace();
                } finally {
    
                    System.out.println("[1] done");
                    //手动回执
                    channel.basicAck(envelope.getDeliveryTag(), false);
                }
            }
        };
        boolean autoAck = false;
        channel.basicConsume(QUEUE_NAME, autoAck, consumer);
    }
}

接收端02:Receive2.java

package test.rabbitmq.rabbitmq.mq5s.mq3;

import com.rabbitmq.client.*;
import test.rabbitmq.rabbitmq.mq5s.ConnectionUtils;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive2 {
    
    public static final String QUEUE_NAME = "test_work_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        //创建链接
        Connection connection = ConnectionUtils.getConnection();
        //创建频道
        final Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //保证一次只发送一个
        channel.basicQos(1);
        //定义一个消费者
        Consumer consumer = new DefaultConsumer(channel) {
    
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
                String msg = new String(body, "utf-8");
                System.out.println("[2] Recv msg :" + msg);
                try {
    
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
    
                    e.printStackTrace();
                } finally {
    
                    System.out.println("[2] done");
                    //手动回执
                    channel.basicAck(envelope.getDeliveryTag(), false);
                }
            }
        };
        boolean autoAck = false;
        channel.basicConsume(QUEUE_NAME, autoAck, consumer);
    }
}

发布订阅模式

模型图

在这里插入图片描述

发送端:send.java

package test.rabbitmq.rabbitmq.mq5s.mq4;

import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 发送消息
 */
public class send {
    
    public static void main(String[] args) throws IOException, TimeoutException {
    

        //1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2. 设置参数
        factory.setHost("127.0.0.1");//ip  默认值 localhost
        factory.setPort(5672); //端口  默认值 5672
        factory.setVirtualHost("/");//虚拟机 默认值/
        factory.setUsername("guest");//用户名 默认 guest
        factory.setPassword("guest");//密码 默认值 guest
        //3. 创建连接 Connection
        Connection connection = factory.newConnection();
        //4. 创建Channel
        Channel channel = connection.createChannel();
       /*

       exchangeDeclare(String exchange, BuiltinExchangeType type, boolean durable, boolean autoDelete, boolean internal, Map<String, Object> arguments)
       参数:
        1. exchange:交换机名称
        2. type:交换机类型
            DIRECT("direct"),:定向,把消息交给符合指定routing key 的队列。
            FANOUT("fanout"),:扇形(广播),发送消息到每一个与之绑定队列。
            TOPIC("topic"),通配符的方式
            HEADERS("headers");参数匹配

        3. durable:是否持久化
        4. autoDelete:自动删除
        5. internal:内部使用。 一般false
        6. arguments:参数
        */

        String exchangeName = "test_fanout";
        //5. 创建交换机
        channel.exchangeDeclare(exchangeName, BuiltinExchangeType.FANOUT,true,false,false,null);
        //6. 创建队列
        String queue1Name = "test_fanout_queue1";
        String queue2Name = "test_fanout_queue2";
        channel.queueDeclare(queue1Name,true,false,false,null);
        channel.queueDeclare(queue2Name,true,false,false,null);
        //7. 绑定队列和交换机
        /*
        queueBind(String queue, String exchange, String routingKey)
        参数:
            1. queue:队列名称
            2. exchange:交换机名称
            3. routingKey:路由键,绑定规则
                如果交换机的类型为fanout ,routingKey设置为""
         */
        channel.queueBind(queue1Name,exchangeName,"");
        channel.queueBind(queue2Name,exchangeName,"");

        String body = "日志信息:张三调用了findAll方法...日志级别:info...";
        //8. 发送消息
        channel.basicPublish(exchangeName,"",null,body.getBytes());

        //9. 释放资源
        channel.close();
        connection.close();

    }
}

接收端01:receive1.java

package test.rabbitmq.rabbitmq.mq5s.mq4;

import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class receive1 {
    
    public static void main(String[] args) throws IOException, TimeoutException {
    

        //1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2. 设置参数
        factory.setHost("127.0.0.1");//ip  默认值 localhost
        factory.setPort(5672); //端口  默认值 5672
        factory.setVirtualHost("/");//虚拟机 默认值/
        factory.setUsername("guest");//用户名 默认 guest
        factory.setPassword("guest");//密码 默认值 guest
        //3. 创建连接 Connection
        Connection connection = factory.newConnection();
        //4. 创建Channel
        Channel channel = connection.createChannel();


        String queue1Name = "test_fanout_queue1";
        String queue2Name = "test_fanout_queue2";


        /*
        basicConsume(String queue, boolean autoAck, Consumer callback)
        参数:
            1. queue:队列名称
            2. autoAck:是否自动确认
            3. callback:回调对象

         */
        // 接收消息
        Consumer consumer = new DefaultConsumer(channel){
    
            /*
                回调方法,当收到消息后,会自动执行该方法

                1. consumerTag:标识
                2. envelope:获取一些信息,交换机,路由key...
                3. properties:配置信息
                4. body:数据

             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
              /*  System.out.println("consumerTag:"+consumerTag);
                System.out.println("Exchange:"+envelope.getExchange());
                System.out.println("RoutingKey:"+envelope.getRoutingKey());
                System.out.println("properties:"+properties);*/
                System.out.println("body:"+new String(body));
                System.out.println("将日志信息打印到控制台.....");
            }
        };
        channel.basicConsume(queue1Name,true,consumer);


        //关闭资源?不要

    }
}

接收端02:receive2.java

package test.rabbitmq.rabbitmq.mq5s.mq4;

import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class receive2 {
    
    public static void main(String[] args) throws IOException, TimeoutException {
    

        //1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2. 设置参数
        factory.setHost("127.0.0.1");//ip  默认值 localhost
        factory.setPort(5672); //端口  默认值 5672
        factory.setVirtualHost("/");//虚拟机 默认值/
        factory.setUsername("guest");//用户名 默认 guest
        factory.setPassword("guest");//密码 默认值 guest
        //3. 创建连接 Connection
        Connection connection = factory.newConnection();
        //4. 创建Channel
        Channel channel = connection.createChannel();


        String queue1Name = "test_fanout_queue1";
        String queue2Name = "test_fanout_queue2";


        /*
        basicConsume(String queue, boolean autoAck, Consumer callback)
        参数:
            1. queue:队列名称
            2. autoAck:是否自动确认
            3. callback:回调对象

         */
        // 接收消息
        Consumer consumer = new DefaultConsumer(channel){
    
            /*
                回调方法,当收到消息后,会自动执行该方法

                1. consumerTag:标识
                2. envelope:获取一些信息,交换机,路由key...
                3. properties:配置信息
                4. body:数据

             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    
              /*  System.out.println("consumerTag:"+consumerTag);
                System.out.println("Exchange:"+envelope.getExchange());
                System.out.println("RoutingKey:"+envelope.getRoutingKey());
                System.out.println("properties:"+properties);*/
                System.out.println("body:"+new String(body));
                System.out.println("将日志信息保存数据库.....");
            }
        };
        channel.basicConsume(queue2Name,true,consumer);


        //关闭资源?不要

    }
}

路由模式

模型图
在这里插入图片描述

发送端:Send.java

package test.rabbitmq.rabbitmq.mq5s.mq5;


import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Send {
    
    private static final String EXCHANGE_NAME = "logs2";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        ConnectionFactory factory = new ConnectionFactory();
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_NAME, "direct");
        //debug日志
        for (int i = 1; i <= 3; i++) {
    
            String message = "debug_message" + i;
            channel.basicPublish(EXCHANGE_NAME, "debug", null, message.getBytes());
        }
        //info日志
        for (int i = 1; i <= 3; i++) {
    
            String message = "info_message" + i;
            channel.basicPublish(EXCHANGE_NAME, "info", null, message.getBytes());
        }
        //error日志
        for (int i = 1; i <= 3; i++) {
    
            String message = "error_message" + i;
            channel.basicPublish(EXCHANGE_NAME, "error", null, message.getBytes());
        }
        channel.close();
        connection.close();
    }
}

接收端01:Receive1.java

package test.rabbitmq.rabbitmq.mq5s.mq5;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive1 {
    
    private static final String EXCHANGE_NAME = "logs2";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        ConnectionFactory factory = new ConnectionFactory();
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_NAME, "direct");
        String queueName = channel.queueDeclare().getQueue();
        channel.queueBind(queueName, EXCHANGE_NAME, "debug");
        Consumer consumer=new DefaultConsumer(channel){
    
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
                    throws IOException {
    
                String message = new String(body, "UTF-8");
                System.out.println(message);
            }
        };
        channel.basicConsume(queueName,true,consumer);
    }
}

接收端02:Receive2.java

package test.rabbitmq.rabbitmq.mq5s.mq5;

import com.rabbitmq.client.*;


import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive2 {
    
    private static final String EXCHANGE_NAME = "logs2";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        ConnectionFactory factory = new ConnectionFactory();
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_NAME, "direct");
        String queueName = channel.queueDeclare().getQueue();
        channel.queueBind(queueName, EXCHANGE_NAME, "info");

        DefaultConsumer consumer=new DefaultConsumer(channel){
    
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
                    throws IOException {
    
                String message = new String(body, "UTF-8");
                System.out.println(message);
            }
        };
        channel.basicConsume(queueName,true,consumer);
    }
}

接收端03:Receive3.java

package test.rabbitmq.rabbitmq.mq5s.mq5;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive3 {
    
    private static final String EXCHANGE_NAME = "logs2";

    public static void main(String[] args) throws IOException, TimeoutException {
    
        ConnectionFactory factory = new ConnectionFactory();
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_NAME, "direct");
        String queueName = channel.queueDeclare().getQueue();
        channel.queueBind(queueName, EXCHANGE_NAME, "error");
        Consumer consumer = new DefaultConsumer(channel) {
    
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
                    throws IOException {
    
                String message = new String(body, "UTF-8");
                FileUtil.save(message);
                System.out.println("添加记录到文件!");
            }
        };
        channel.basicConsume(queueName,true,consumer);
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzh1378008099/article/details/108011046

智能推荐

基于javaweb+mysql的jsp+servlet电影票售票管理系统(java+jsp+servlet+javabean+mysql)_【java+jsp+mysql】订票系统-程序员宅基地

文章浏览阅读192次。基于javaweb+mysql的jsp+servlet电影票售票管理系统(java+jsp+servlet+javabean+mysql)运行环境Java≥8、MySQL≥5.7、Tomcat≥8开发工具eclipse/idea/myeclipse/sts等均可配置运行适用课程设计,大作业,毕业设计,项目练习,学习演示等功能说明后台:管理用户、影片、排片、影厅、订单、影评等前台:注册登录、查看排片、详情,选座、购票等后台前台技术框架JSP Servlet MySQL C3P0 DBUtil Tomcat J_【java+jsp+mysql】订票系统

【Flutter】AutomaticKeepAliveClientMixin解决Tab切换页面频繁build问题_flutter如何防止子view重新build-程序员宅基地

文章浏览阅读563次,点赞6次,收藏10次。Flutter中的PageView和TabBarView默认每次切换页面时都会重新构建(build)页面,这样虽然渲染了最新的UI,但是这种行为可能会导致性能问题,特别是页面中有复杂的布局和数据加载时。解决这个问题,可以用AutomaticKeepAliveClientMixin接口和它的wantKeepAlive方法。保持页面状态,避免每次切换都重新构建。_flutter如何防止子view重新build

输入一个正整数再输入n个整数逆序存放并输出_c语言多组测试,每组先输入一个不大于10的整数n 然后是n个整数,输出这n个整数中最-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏14次。【问题描述】输入一个正整数n(1<n<10),再输入n个整数,存入数组中,再将数组中的数,逆序存放并输出【输入形式】先输入一个整数n,再输入n个整数,用空格间隔【输出形式】输出n个整数,用空格间隔【样例输入】 51 2 3 4 5#include<stdio.h>int main(){ int n,a[10],z,i,j; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&..._c语言多组测试,每组先输入一个不大于10的整数n 然后是n个整数,输出这n个整数中最

Android RIL源码梳理(1) ——rild启动流程 ._android rild启动-程序员宅基地

文章浏览阅读1.6k次。一、RIL的基本架构Android RIL (Radio Interface Layer)提供了Telephony服务和Radio硬件之间的抽象层。RIL负责数据的可靠传输、AT命令的发送以及response的解析。一般的,应用处理器(AP)通过AT命令集与无线通讯模块(基带/BP)通信。通信的方式又分为主动请求的request(诸如拨号、发短信……),以及Modem主动上报的例如信号_android rild启动

uni-app-程序员宅基地

文章浏览阅读560次,点赞22次,收藏21次。uni-app 是一个基于 Vue.js 的跨平台应用开发框架。它允许开发者使用 Vue.js 的语法编写一次代码,然后将该代码发布到多个平台,包括但不限于微信小程序、H5、App 等。uni-app 提供了一套完整的开发工具链和组件库,使开发者能够快速构建跨平台的应用,并具备良好的性能和用户体验。视图容器首先,在components目录下创建一个新的.vue文件,作为自定义组件的文件。例如,可以创建一个名为的文件。在组件文件中,编写组件的模板部分,定义组件的结构和内容。

如何生成 .plist文件,plist文件制作教程_plist生成-程序员宅基地

文章浏览阅读8.1k次,点赞4次,收藏7次。如何生成 .plist文件,plist文件制作教程如何生成 plist文件plist文件制作教程准备好已经切分好的序列图打开软件按图提示操作选择位置保存生成的两个文件 plist png example前期准备软件:TexturePacker要制作的序列图1.准备好已经切分好的序列图2.打开软件3.按图提示操作选择位置保存生成的两个文件 *.plist *.png examp_plist生成

随便推点

HTML如何编写类似QQ聊天框,jQuery实现简易QQ聊天框-程序员宅基地

文章浏览阅读831次。本文实例为大家分享了jQuery实现简易QQ聊天框的具体代码,供大家参考,具体内容如下例子1*{list-style: none;margin: 0;padding: 0;}.box1{width: 500px;height: 480px;border: 1px solid #aaa;margin: 0 auto;margin-top: 20px;}.box{width: 500px;height..._pc端类似于qq的html聊天界面

知识图谱从入门到应用——知识图谱的知识表示:符号表示方法_知识图谱符号表示-程序员宅基地

文章浏览阅读1.2w次,点赞9次,收藏13次。在前面的文章中已经多次提到,知识图谱采用图的方式描述和表达知识,相比于简单图,能建模更加复杂的事物关系,但比起形式化逻辑,又免于复杂的逻辑约束,使得知识的获取过程变得更加容易。但在知识图谱的实际实践中,不同的应用场景会对知识的建模采用不同表达能力的图表示方法。例如有些应用场景仅采用最简单的无向图,通常适合于对建模要求不高,偏于数据挖掘类的应用场景。知识图谱表示应用最多的是有向标记图(Directed Labelled Graph)。_知识图谱符号表示

Android Studio APK在真机上运行的方法(1)-程序员宅基地

文章浏览阅读710次,点赞8次,收藏17次。这时候软件可能就会识别手机。如果以上方法不可行,又不想花太多时间去找问题,就可以采用安装安装包的方式。我们可以在每一个对应项目对应目录下面的app\build\outputs\apk\debug查找到软件自动生成的安装包。如果是新版的AS的话可能只会看到一个app-debug.apk,并没有什么网上说的app-debug-unaligned.apk什么的两个.apk结尾的文件,这都不要紧,可以把这个拿到手机上直接安装。

Unity 划线 - 使用Image实现划线_unity quest3 在image上画线-程序员宅基地

文章浏览阅读1w次,点赞11次,收藏38次。unity使用Image实现划线功能_unity quest3 在image上画线

获取表单内部元素的N种方法_提取所有表单元素的方法-程序员宅基地

文章浏览阅读3.1k次。今天讲讲获取表单元素的N种方法~以上是部分资料参考的地方:http://blog.csdn.net/h12kjgj/article/details/61624509先给出一个实例。输入数字1~10,弹出输入的数字,并计算该数字的阶乘;如果输入的数字不在该范围内,则输出“balabala自己编的一些话”源代码: function Count(){var i,r,_提取所有表单元素的方法

脑肠轴——看不见的Crosstalk_脑肠轴检测指标-程序员宅基地

文章浏览阅读1.8w次,点赞5次,收藏11次。文献导读肠道菌群是指存在于宿主肠道内的微生物集合,它参与了宿主多种重要的生理作用,如影响机体的营养代谢、调节机体免疫系统的发育与成熟及抗菌作用,因此肠道菌群又被人称之为"被遗忘的器官"。随着科学技术的发展,人们逐渐意识到到肠道菌群与全身各个系统的疾病的发生发展都存在着密切的关联,从而提出一些像"肠脑轴"和"肠肝轴"等名词。肠脑轴背景介绍据统计,定植于人体肠道内数量约是人体细胞数量的..._脑肠轴检测指标

推荐文章

热门文章

相关标签