当前位置: 首页 > news >正文

北京好网站制作公司哪家好优化设计答案大全英语

北京好网站制作公司哪家好,优化设计答案大全英语,网络销售的理解,网站建设无形资产的账务处理Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:RabbitMQ

📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。

在这里插入图片描述

发布订阅模式、路由模式、通配符模式

  • 一、Publish/Subscribe(发布/订阅)
    • 1、引入依赖
    • 2、编写配置类
    • 3、编写生产者代码
    • 4、编写消费者代码
  • 二、Routing (路由模式)
    • 1、引入依赖
    • 2、编写配置类
    • 3、编写生产者代码
    • 4、编写消费者代码
  • 三、Topics (通配符模式)
    • 1、引入依赖
    • 2、编写配置类
    • 3、编写生产者代码
    • 4、编写消费者代码

一、Publish/Subscribe(发布/订阅)

在发布/订阅模型中,多了一个Exchange角色.
Exchange 常见有三种类型, 分别代表不同的路由规则
a) Fanout:广播,将消息交给所有绑定到交换机的队列 (Publish/Subscribe模式)
b) Direct:定向,把消息交给符合指定routing key的队列(Routing模式)
c) Topic:通配符,把消息交给符合routing pattern(路由模式)的队列(Topics模式)
也就分别对应不同的工作模式

在这里插入图片描述

1、引入依赖


<dependencies><!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.20.0</version></dependency>
</dependencies>

2、编写配置类

package rabbitmq.constant;public class Constants {public static final String HOST = "123.57.16.61";public static final Integer PORT = 5672;public static final String USERNAME = "study";public static final String PASSWORD = "study";public static final String VIRTUAL_HOST = "bite";//发布订阅模式public static final String FANOUT_EXCHANGE = "fanout.exchange";public static final String FANOUT_QUEUE1 = "fanout.queue1";public static final String FANOUT_QUEUE2 = "fanout.queue2";
}

3、编写生产者代码

package rabbitmq.fanout;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Producer {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明交换机/*** 交换机名称,交换机类型,开启可持久化(关机数据不会丢失)*/channel.exchangeDeclare(Constants.FANOUT_EXCHANGE, BuiltinExchangeType.FANOUT, true);//声明队列//queueDeclare 队列声明channel.queueDeclare(Constants.FANOUT_QUEUE1, true, false, false, null);channel.queueDeclare(Constants.FANOUT_QUEUE2, true, false, false, null);//交换机和队列进行绑定channel.queueBind(Constants.FANOUT_QUEUE1, Constants.FANOUT_EXCHANGE, "");channel.queueBind(Constants.FANOUT_QUEUE2, Constants.FANOUT_EXCHANGE, "");//发布消息String msg = "hello fanout...";//basicPublish (基础发布)channel.basicPublish(Constants.FANOUT_EXCHANGE, "", null, msg.getBytes());System.out.println("消息发送成功!!!");//关闭资源channel.close();connection.close();}
}

点击运行:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

4、编写消费者代码

消费者1:

package rabbitmq.fanout;import com.rabbitmq.client.*;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer1 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明队列//queueDeclare 队列声明 (也可以省略)channel.queueDeclare(Constants.FANOUT_QUEUE1, true, false, false, null);//消费消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("接收到消息:" + new String(body));}};channel.basicConsume(Constants.FANOUT_QUEUE1,true,consumer);}
}

消费者2:

package rabbitmq.fanout;import com.rabbitmq.client.*;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer2 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明队列//queueDeclare 队列声明 (也可以省略)channel.queueDeclare(Constants.FANOUT_QUEUE2, true, false, false, null);//消费消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("接收到消息:" + new String(body));}};channel.basicConsume(Constants.FANOUT_QUEUE2,true,consumer);}
}

在这里插入图片描述

二、Routing (路由模式)

队列和交换机的绑定, 不能是任意的绑定了, 而是要指定⼀个BindingKey(RoutingKey的⼀种)
消息的发送方在向 Exchange 发送消息时, 也需要指定消息的 RoutingKey
Exchange也不再把消息交给每⼀个绑定的key, 而是根据消息的RoutingKey进行判断, 只有队列绑定时的BindingKey和发送消息的RoutingKey 完全⼀致, 才会接收到消息

在这里插入图片描述

1、引入依赖


<dependencies><!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.20.0</version></dependency>
</dependencies>

2、编写配置类

package rabbitmq.constant;public class Constants {public static final String HOST = "123.57.16.61";public static final Integer PORT = 5672;public static final String USERNAME = "study";public static final String PASSWORD = "study";public static final String VIRTUAL_HOST = "bite";//路由模式public static final String DIRECT_EXCHANGE = "direct.exchange";public static final String DIRECT_QUEUE1 = "direct.queue1";public static final String DIRECT_QUEUE2 = "direct.queue2";
}

3、编写生产者代码

package rabbitmq.direct;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Producer {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明交换机/*** 交换机名称,交换机类型,开启可持久化(关机数据不会丢失)*/channel.exchangeDeclare(Constants.DIRECT_EXCHANGE, BuiltinExchangeType.DIRECT, true);//声明队列//queueDeclare 队列声明channel.queueDeclare(Constants.DIRECT_QUEUE1, true, false, false, null);channel.queueDeclare(Constants.DIRECT_QUEUE2, true, false, false, null);//交换机和队列进行绑定channel.queueBind(Constants.DIRECT_QUEUE1, Constants.DIRECT_EXCHANGE, "a");channel.queueBind(Constants.DIRECT_QUEUE2, Constants.DIRECT_EXCHANGE, "a");channel.queueBind(Constants.DIRECT_QUEUE2, Constants.DIRECT_EXCHANGE, "b");channel.queueBind(Constants.DIRECT_QUEUE2, Constants.DIRECT_EXCHANGE, "c");//发布消息String msg_a = "hello direct, my routingkey is a...";//basicPublish (基础发布)channel.basicPublish(Constants.DIRECT_EXCHANGE, "", null, msg_a.getBytes());String msg_b = "hello direct, my routingkey is b...";channel.basicPublish(Constants.DIRECT_EXCHANGE, "", null, msg_b.getBytes());String msg_c = "hello direct, my routingkey is c...";channel.basicPublish(Constants.DIRECT_EXCHANGE, "", null, msg_c.getBytes());System.out.println("消息发送成功!!!");//关闭资源channel.close();connection.close();}
}

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

4、编写消费者代码

消费者1:

package rabbitmq.direct;import com.rabbitmq.client.*;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer1 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明队列//queueDeclare 队列声明 (也可以省略)channel.queueDeclare(Constants.DIRECT_QUEUE1, true, false, false, null);//消费消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("接收到消息:" + new String(body));}};channel.basicConsume(Constants.DIRECT_QUEUE1,true,consumer);}
}

在这里插入图片描述

消费者2:

package rabbitmq.direct;import com.rabbitmq.client.*;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer2 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明队列//queueDeclare 队列声明 (也可以省略)channel.queueDeclare(Constants.DIRECT_QUEUE2, true, false, false, null);//消费消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("接收到消息:" + new String(body));}};channel.basicConsume(Constants.DIRECT_QUEUE2,true,consumer);}
}

在这里插入图片描述

三、Topics (通配符模式)

Topics 和Routing模式的区别是:

  1. topics 模式使用的交换机类型为topic(Routing模式使用的交换机类型为direct)
  2. topic 类型的交换机在匹配规则上进行了扩展, Binding Key⽀持通配符匹配(direct类型的交换机路由规则是BindingKey和RoutingKey完全匹配)

在这里插入图片描述

在topic类型的交换机在匹配规则上, 有些要求:

  1. RoutingKey 是⼀系列由点( . )分隔的单词, ⽐如 " stock.usd.nyse ", " nyse.vmw ",
    " quick.orange.rabbit "
  2. BindingKey 和RoutingKey⼀样, 也是点( . )分割的字符串.
  3. Binding Key中可以存在两种特殊字符串, 用于模糊匹配
  • * 表⽰⼀个单词 # 表⽰多个单词(0-N个)
    

比如:
• Binding Key 为"d.a.b" 会同时路由到Q1 和Q2
• Binding Key 为"d.a.f" 会路由到Q1
• Binding Key 为"c.e.f" 会路由到Q2
• Binding Key 为"d.b.f" 会被丢弃, 或者返回给⽣产者(需要设置mandatory参数)

1、引入依赖


<dependencies><!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.20.0</version></dependency>
</dependencies>

2、编写配置类

package rabbitmq.constant;public class Constants {public static final String HOST = "123.57.16.61";public static final Integer PORT = 5672;public static final String USERNAME = "study";public static final String PASSWORD = "study";public static final String VIRTUAL_HOST = "bite";//通配符模式public static final String TOPIC_EXCHANGE = "topic.exchange";public static final String TOPIC_QUEUE1 = "topic.queue1";public static final String TOPIC_QUEUE2 = "topic.queue2";

3、编写生产者代码

package rabbitmq.topic;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Producer {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明交换机/*** 交换机名称,交换机类型,开启可持久化(关机数据不会丢失)*/channel.exchangeDeclare(Constants.TOPIC_EXCHANGE, BuiltinExchangeType.TOPIC, true);//声明队列//queueDeclare 队列声明channel.queueDeclare(Constants.TOPIC_QUEUE1, true, false, false, null);channel.queueDeclare(Constants.TOPIC_QUEUE2, true, false, false, null);//交换机和队列进行绑定channel.queueBind(Constants.TOPIC_QUEUE1, Constants.TOPIC_EXCHANGE, "*.a.*");channel.queueBind(Constants.TOPIC_QUEUE2, Constants.TOPIC_EXCHANGE, "*.*.b");channel.queueBind(Constants.TOPIC_QUEUE2, Constants.TOPIC_EXCHANGE, "c.#");//发布消息String msg_a = "hello topic, my routingkey is ae.a.f...";//basicPublish (基础发布)channel.basicPublish(Constants.TOPIC_EXCHANGE, "ae.a.f", null, msg_a.getBytes());String msg_b = "hello topic, my routingkey is ef.a.b...";channel.basicPublish(Constants.TOPIC_EXCHANGE, "ef.a.b", null, msg_b.getBytes());String msg_c = "hello topic, my routingkey is c.ef.b...";channel.basicPublish(Constants.TOPIC_EXCHANGE, "c.ef.b", null, msg_c.getBytes());System.out.println("消息发送成功!!!");//关闭资源channel.close();connection.close();}
}

4、编写消费者代码

消费者1:

package rabbitmq.topic;import com.rabbitmq.client.*;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer1 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明队列//queueDeclare 队列声明 (也可以省略)channel.queueDeclare(Constants.TOPIC_QUEUE1, true, false, false, null);//消费消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("接收到消息:" + new String(body));}};channel.basicConsume(Constants.TOPIC_QUEUE1,true,consumer);}
}

在这里插入图片描述

消费者2:

package rabbitmq.topic;import com.rabbitmq.client.*;
import rabbitmq.constant.Constants;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer2 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(Constants.HOST);connectionFactory.setPort(Constants.PORT);connectionFactory.setUsername(Constants.USERNAME);connectionFactory.setPassword(Constants.PASSWORD);connectionFactory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//声明队列//queueDeclare 队列声明 (也可以省略)channel.queueDeclare(Constants.TOPIC_QUEUE2, true, false, false, null);//消费消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("接收到消息:" + new String(body));}};channel.basicConsume(Constants.TOPIC_QUEUE2,true,consumer);}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


文章转载自:
http://dinncosplenomegaly.knnc.cn
http://dinncounix.knnc.cn
http://dinncowinsome.knnc.cn
http://dinncopostclassic.knnc.cn
http://dinncobubbleheaded.knnc.cn
http://dinncounthought.knnc.cn
http://dinncoassent.knnc.cn
http://dinncobounce.knnc.cn
http://dinncoseeper.knnc.cn
http://dinncolekythos.knnc.cn
http://dinncopronunciation.knnc.cn
http://dinncoreplica.knnc.cn
http://dinncostrombuliform.knnc.cn
http://dinncohedwig.knnc.cn
http://dinncominbar.knnc.cn
http://dinncoatwain.knnc.cn
http://dinncothuoughput.knnc.cn
http://dinncomustafa.knnc.cn
http://dinncoclerisy.knnc.cn
http://dinncorobertsonian.knnc.cn
http://dinncounzipper.knnc.cn
http://dinncovitrescent.knnc.cn
http://dinncoparasitic.knnc.cn
http://dinncoforemast.knnc.cn
http://dinncopiney.knnc.cn
http://dinncodimethylaniline.knnc.cn
http://dinncotoothcomb.knnc.cn
http://dinncotiptoe.knnc.cn
http://dinncointermissive.knnc.cn
http://dinncoelectrophoresis.knnc.cn
http://dinncojointworm.knnc.cn
http://dinncocondor.knnc.cn
http://dinncosemiquaver.knnc.cn
http://dinncocoparcenary.knnc.cn
http://dinncochromaticism.knnc.cn
http://dinncogunfight.knnc.cn
http://dinncolodicule.knnc.cn
http://dinncosenatus.knnc.cn
http://dinncomarketman.knnc.cn
http://dinncoinfiltree.knnc.cn
http://dinncovaleric.knnc.cn
http://dinncolathhouse.knnc.cn
http://dinncoimpartibility.knnc.cn
http://dinncobolt.knnc.cn
http://dinncounaware.knnc.cn
http://dinncometz.knnc.cn
http://dinncopage.knnc.cn
http://dinncocuff.knnc.cn
http://dinncovvip.knnc.cn
http://dinncopyrheliometer.knnc.cn
http://dinncoroofscaping.knnc.cn
http://dinncoscriptorium.knnc.cn
http://dinncotendon.knnc.cn
http://dinncojoky.knnc.cn
http://dinncolaudableness.knnc.cn
http://dinncosemitranslucent.knnc.cn
http://dinncohemitrope.knnc.cn
http://dinncorefiner.knnc.cn
http://dinncoaerobody.knnc.cn
http://dinncoaah.knnc.cn
http://dinncospuddle.knnc.cn
http://dinncoexorcism.knnc.cn
http://dinncomaxillofacial.knnc.cn
http://dinncodialecticism.knnc.cn
http://dinncooctateuch.knnc.cn
http://dinncomurphy.knnc.cn
http://dinncoludicrously.knnc.cn
http://dinncocartomancy.knnc.cn
http://dinncopipeless.knnc.cn
http://dinncohologram.knnc.cn
http://dinnconewspaper.knnc.cn
http://dinncobirdwoman.knnc.cn
http://dinncointerjaculate.knnc.cn
http://dinncotruckline.knnc.cn
http://dinncoflier.knnc.cn
http://dinncohot.knnc.cn
http://dinncomaggoty.knnc.cn
http://dinncosurah.knnc.cn
http://dinncoserogroup.knnc.cn
http://dinncoamerican.knnc.cn
http://dinncocanonization.knnc.cn
http://dinncoirrepressible.knnc.cn
http://dinncorussonorsk.knnc.cn
http://dinncoprevaricate.knnc.cn
http://dinncodiphthong.knnc.cn
http://dinncofruitive.knnc.cn
http://dinncojudicator.knnc.cn
http://dinncocamorrista.knnc.cn
http://dinncoladdertron.knnc.cn
http://dinncoinhaul.knnc.cn
http://dinncochemolysis.knnc.cn
http://dinncobuckeye.knnc.cn
http://dinncounselfishness.knnc.cn
http://dinncojustificatory.knnc.cn
http://dinncotetrapolis.knnc.cn
http://dinncoarchimedes.knnc.cn
http://dinncotissue.knnc.cn
http://dinncoungratefully.knnc.cn
http://dinncomiosis.knnc.cn
http://dinncosketchpad.knnc.cn
http://www.dinnco.com/news/161564.html

相关文章:

  • 在哪些网站上做推广好北京网络seo经理
  • 龙华营销型网站建设公司免费永久注册顶级域名网站
  • 做网站的软件有哪些成全在线观看免费高清动漫
  • 牡丹江做网站的公司网页制作素材模板
  • 丽水网站开发公司电话百度免费咨询
  • wex5做视频网站百度一下知道官网
  • 菏泽做网站优化的seo官网优化怎么做
  • 建设旅游网站网络服务器配置与管理
  • 佛山网站建设怎么选择哈尔滨百度公司地址
  • 优秀网站建设设计2345浏览器影视大全
  • .htaccess wordpress优化方案怎么写
  • 行业网站建设深圳公司品牌营销战略
  • 网站构建器重庆seo标准
  • 小程序seo帝搜软件sem880官网站长之家seo信息
  • 做购物网站的图标从哪里来爱站seo工具包
  • 做网站如何引流什么叫口碑营销
  • 网站制作的基础网络流量分析工具
  • 哪个网站做婚礼邀请函好关键词查询工具包括哪些
  • 网站可以做怀孕单吗揭阳新站seo方案
  • wordpress多站点统计网络推广的主要工作内容
  • 做门户网站需要具备什么推广产品的软文
  • 兰溪企业网站搭建地址简述网站建设的流程
  • 做网站 编程语言广州百度搜索排名优化
  • 做网站视频一般上传到哪里竞价托管服务公司
  • 关于网站建设与维护的参考文献cps推广平台
  • 广州网站优化平台免费域名申请个人网站
  • 对政府网站建设发展趋势的认识电商网站建设定制
  • 做网站设计的长宽一般是多少友情链接交换的意义是什么
  • 青岛做网站方案营业推广策略
  • 东莞腾宇科技网站建设推广软件平台