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

校企合作网站建设广州有什么好玩的地方推荐一下

校企合作网站建设,广州有什么好玩的地方推荐一下,自己怎么做 优惠券网站,东莞大岭山有什么好玩的地方1、消息存储分析 1.1 DefaultMessageStore 概要 其核心属性如下#xff1a; messageStoreConfig 存储相关的配置#xff0c;例如存储路径、commitLog文件大小#xff0c;刷盘频次等等。CommitLog commitLog comitLog 的核心处理类#xff0c;消息存储在 commitlog 文件中…1、消息存储分析 1.1 DefaultMessageStore 概要 其核心属性如下 messageStoreConfig 存储相关的配置例如存储路径、commitLog文件大小刷盘频次等等。CommitLog commitLog comitLog 的核心处理类消息存储在 commitlog 文件中。ConcurrentMapString/* topic */, ConcurrentMapInteger/* queueId */, ConsumeQueue consumeQueueTable topic 的队列信息。FlushConsumeQueueService flushConsumeQueueService ConsumeQueue 刷盘服务线程。CleanCommitLogService cleanCommitLogService commitLog 过期文件删除线程。CleanConsumeQueueService cleanConsumeQueueService consumeQueue 过期文件删除线程。、IndexService indexService 索引服务。AllocateMappedFileService allocateMappedFileService MappedFile 分配线程RocketMQ 使用内存映射处理 commitlog、consumeQueue文件。ReputMessageService reputMessageService reput 转发线程负责 Commitlog 转发到 Consumequeue、Index文件。HAService haService 主从同步实现服务。ScheduleMessageService scheduleMessageService 定时任务调度器执行定时任务。StoreStatsService storeStatsService 存储统计服务。TransientStorePool transientStorePool ByteBuffer 池后文会详细使用。RunningFlags runningFlags 存储服务状态。BrokerStatsManager brokerStatsManager Broker 统计服务。MessageArrivingListener messageArrivingListener 消息达到监听器。StoreCheckpoint storeCheckpoint 刷盘检测点。LinkedList dispatcherList 转发 comitlog 日志主要是从 commitlog 转发到 consumeQueue、index 文件。 上面这些属性是整个消息存储的核心也是我们需要重点关注与理解的将会在本系列一一介绍到。 接下来先从 putMessage 为入口一起探究整个消息存储全过程。 1.2 消息存储流程 1.2.1 DefaultMessageStore.putMessage public PutMessageResult putMessage(MessageExtBrokerInner msg) {if (this.shutdown) {log.warn(message store has shutdown, so putMessage is forbidden);return new PutMessageResult(PutMessageStatus.SERVICE_NOT_AVAILABLE, null);}if (BrokerRole.SLAVE this.messageStoreConfig.getBrokerRole()) {long value this.printTimes.getAndIncrement();if ((value % 50000) 0) {log.warn(message store is slave mode, so putMessage is forbidden );}return new PutMessageResult(PutMessageStatus.SERVICE_NOT_AVAILABLE, null);}if (!this.runningFlags.isWriteable()) {long value this.printTimes.getAndIncrement();if ((value % 50000) 0) {log.warn(message store is not writeable, so putMessage is forbidden this.runningFlags.getFlagBits());}return new PutMessageResult(PutMessageStatus.SERVICE_NOT_AVAILABLE, null);} else {this.printTimes.set(0);}if (msg.getTopic().length() Byte.MAX_VALUE) {log.warn(putMessage message topic length too long msg.getTopic().length());return new PutMessageResult(PutMessageStatus.MESSAGE_ILLEGAL, null);}if (msg.getPropertiesString() ! null msg.getPropertiesString().length() Short.MAX_VALUE) {log.warn(putMessage message properties length too long msg.getPropertiesString().length());return new PutMessageResult(PutMessageStatus.PROPERTIES_SIZE_EXCEEDED, null);}if (this.isOSPageCacheBusy()) { //1return new PutMessageResult(PutMessageStatus.OS_PAGECACHE_BUSY, null);}long beginTime this.getSystemClock().now();PutMessageResult result this.commitLog.putMessage(msg); // 2long eclipseTime this.getSystemClock().now() - beginTime;if (eclipseTime 500) {log.warn(putMessage not in lock eclipse time(ms){}, bodyLength{}, eclipseTime, msg.getBody().length);}this.storeStatsService.setPutMessageEntireTimeMax(eclipseTime); //3if (null result || !result.isOk()) { //4 this.storeStatsService.getPutMessageFailedTimes().incrementAndGet();}return result; 代码1检测操作系统页写入是否繁忙。 Overridepublic boolean isOSPageCacheBusy() {long begin this.getCommitLog().getBeginTimeInLock();long diff this.systemClock.now() - begin;if (diff 10000000 // diff this.messageStoreConfig.getOsPageCacheBusyTimeOutMills()) {return true;}return false; 代码2将日志写入CommitLog 文件具体实现类 CommitLog。 代码3记录相关统计信息。 代码4记录写commitlog 失败次数。 1.2.2 CommitLog.putMessage public PutMessageResult putMessage(final MessageExtBrokerInner msg) {// Set the storage timemsg.setStoreTimestamp(System.currentTimeMillis());// Set the message body BODY CRC (consider the most appropriate setting// on the client)msg.setBodyCRC(UtilAll.crc32(msg.getBody()));// Back to ResultsAppendMessageResult result null;StoreStatsService storeStatsService this.defaultMessageStore.getStoreStatsService();String topic msg.getTopic();int queueId msg.getQueueId();final int tranType MessageSysFlag.getTransactionValue(msg.getSysFlag()); // 1if (tranType MessageSysFlag.TRANSACTION_NOT_TYPE//|| tranType MessageSysFlag.TRANSACTION_COMMIT_TYPE) { // 2// Delay Deliveryif (msg.getDelayTimeLevel() 0) {if (msg.getDelayTimeLevel() this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel()) {msg.setDelayTimeLevel(this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel());}topic ScheduleMessageService.SCHEDULE_TOPIC;queueId ScheduleMessageService.delayLevel2QueueId(msg.getDelayTimeLevel());// Backup real topic, queueIdMessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_TOPIC, msg.getTopic());MessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_QUEUE_ID, String.valueOf(msg.getQueueId()));msg.setPropertiesString(MessageDecoder.messageProperties2String(msg.getProperties()));msg.setTopic(topic);msg.setQueueId(queueId);}}long eclipseTimeInLock 0;MappedFile unlockMappedFile null;MappedFile mappedFile this.mappedFileQueue.getLastMappedFile(); // 3putMessageLock.lock(); //spin or ReentrantLock ,depending on store config //4try {long beginLockTimestamp this.defaultMessageStore.getSystemClock().now();this.beginTimeInLock beginLockTimestamp;// Here settings are stored timestamp, in order to ensure an orderly// globalmsg.setStoreTimestamp(beginLockTimestamp);if (null mappedFile || mappedFile.isFull()) {mappedFile this.mappedFileQueue.getLastMappedFile(0); // Mark: NewFile may be cause noise}if (null mappedFile) {log.error(create maped file1 error, topic: msg.getTopic() clientAddr: msg.getBornHostString());beginTimeInLock 0;return new PutMessageResult(PutMessageStatus.CREATE_MAPEDFILE_FAILED, null);} // 5result mappedFile.appendMessage(msg, this.appendMessageCallback); // 6switch (result.getStatus()) {case PUT_OK:break;case END_OF_FILE:unlockMappedFile mappedFile;// Create a new file, re-write the messagemappedFile this.mappedFileQueue.getLastMappedFile(0);if (null mappedFile) {// XXX: warn and notify melog.error(create maped file2 error, topic: msg.getTopic() clientAddr: msg.getBornHostString());beginTimeInLock 0;return new PutMessageResult(PutMessageStatus.CREATE_MAPEDFILE_FAILED, result);}result mappedFile.appendMessage(msg, this.appendMessageCallback);break;case MESSAGE_SIZE_EXCEEDED:case PROPERTIES_SIZE_EXCEEDED:beginTimeInLock 0;return new PutMessageResult(PutMessageStatus.MESSAGE_ILLEGAL, result);case UNKNOWN_ERROR:beginTimeInLock 0;return new PutMessageResult(PutMessageStatus.UNKNOWN_ERROR, result);default:beginTimeInLock 0;return new PutMessageResult(PutMessageStatus.UNKNOWN_ERROR, result);}eclipseTimeInLock this.defaultMessageStore.getSystemClock().now() - beginLockTimestamp;beginTimeInLock 0;} finally {putMessageLock.unlock();}if (eclipseTimeInLock 500) {log.warn([NOTIFYME]putMessage in lock cost time(ms){}, bodyLength{} AppendMessageResult{}, eclipseTimeInLock, msg.getBody().length, result);}if (null ! unlockMappedFile this.defaultMessageStore.getMessageStoreConfig().isWarmMapedFileEnable()) {this.defaultMessageStore.unlockMappedFile(unlockMappedFile);}PutMessageResult putMessageResult new PutMessageResult(PutMessageStatus.PUT_OK, result);// StatisticsstoreStatsService.getSinglePutMessageTopicTimesTotal(msg.getTopic()).incrementAndGet();storeStatsService.getSinglePutMessageTopicSizeTotal(topic).addAndGet(result.getWroteBytes());handleDiskFlush(result, putMessageResult, msg); // 7handleHA(result, putMessageResult, msg); //8return putMessageResult; 先对 ComitLog 写入消息做一个简单描述然后需要详细探究每个步骤的实现。 代码1获取消息类型事务消息非事务消息Commit消息。 代码3获取一个 MappedFile 对象内存映射的具体实现。 代码4追加消息需要加锁串行化处理。 代码5验证代码3的 MappedFile 对象获取一个可用的 MappedFile (如果没有则创建一个)。 代码6通过MappedFile对象写入文件。 代码7根据刷盘策略刷盘。 代码8主从同步。 1.3 存储核心类分析 1.3.1 源码分析MappedFile 1、3.1.1 MappedFile 基础属性 public static final int OS_PAGE_SIZE 1024 * 4; // 4K private static final AtomicLong TOTAL_MAPPED_VIRTUAL_MEMORY new AtomicLong(0); private static final AtomicInteger TOTAL_MAPPED_FILES new AtomicInteger(0); protected final AtomicInteger wrotePosition new AtomicInteger(0); protected final AtomicInteger committedPosition new AtomicInteger(0); private final AtomicInteger flushedPosition new AtomicInteger(0); protected int fileSize; protected FileChannel fileChannel;/*** Message will put to here first, and then reput to FileChannel if writeBuffer is not null.*/ protected ByteBuffer writeBuffer null; protected TransientStorePool transientStorePool null; private String fileName; private long fileFromOffset; private File file; private MappedByteBuffer mappedByteBuffer; private volatile long storeTimestamp 0; OS_PAGE_SIZE OSpage大小4K。 TOTAL_MAPPED_VIRTUAL_MEMORY 类变量所有 MappedFile 实例已使用字节总数。TOTAL_MAPPED_FILES MappedFile 个数。wrotePosition 当前MappedFile对象当前写指针。committedPosition 当前提交的指针。flushedPosition 当前刷写到磁盘的指针。fileSize 文件总大小。fileChannel 文件通道。writeBuffer 如果开启了transientStorePoolEnable消息会写入堆外内存然后提交到 PageCache 并最终刷写到磁盘。TransientStorePool transientStorePool ByteBuffer的缓冲池堆外内存transientStorePoolEnable 为 true 时生效。fileName 文件名称。fileFromOffset 文件序号,代表该文件代表的文件偏移量。File file 文件对象。MappedByteBuffer mappedByteBuffer 对应操作系统的 PageCache。storeTimestamp 最后一次存储时间戳。 1、3.1.2 初始化 private void init(final String fileName, final int fileSize) throws IOException {this.fileName fileName;this.fileSize fileSize;this.file new File(fileName);this.fileFromOffset Long.parseLong(this.file.getName());boolean ok false;ensureDirOK(this.file.getParent());try {this.fileChannel new RandomAccessFile(this.file, rw).getChannel();this.mappedByteBuffer this.fileChannel.map(MapMode.READ_WRITE, 0, fileSize);TOTAL_MAPPED_VIRTUAL_MEMORY.addAndGet(fileSize);TOTAL_MAPPED_FILES.incrementAndGet();ok true;} catch (FileNotFoundException e) {log.error(create file channel this.fileName Failed. , e);throw e;} catch (IOException e) {log.error(map file this.fileName Failed. , e);throw e;} finally {if (!ok this.fileChannel ! null) {this.fileChannel.close();}} 初始化 FileChannel、mappedByteBuffer 等。 1、3.1.3 appendMessagesInner 消息写入 public AppendMessageResult appendMessagesInner(final MessageExt messageExt, final AppendMessageCallback cb) {assert messageExt ! null;assert cb ! null;int currentPos this.wrotePosition.get(); // 1if (currentPos this.fileSize) {ByteBuffer byteBuffer writeBuffer ! null ? writeBuffer.slice() : this.mappedByteBuffer.slice(); byteBuffer.position(currentPos);AppendMessageResult result null;if (messageExt instanceof MessageExtBrokerInner) { // 2result cb.doAppend(this.getFileFromOffset(), byteBuffer, this.fileSize - currentPos, (MessageExtBrokerInner) messageExt);} else if (messageExt instanceof MessageExtBatch) {result cb.doAppend(this.getFileFromOffset(), byteBuffer, this.fileSize - currentPos, (MessageExtBatch)messageExt);} else {return new AppendMessageResult(AppendMessageStatus.UNKNOWN_ERROR);}this.wrotePosition.addAndGet(result.getWroteBytes()); // 4this.storeTimestamp result.getStoreTimestamp();return result;}log.error(MappedFile.appendMessage return null, wrotePosition: {} fileSize: {}, currentPos, this.fileSize);return new AppendMessageResult(AppendMessageStatus.UNKNOWN_ERROR); 代码1获取当前写入位置。 代码2根据消息类型是批量消息还是单个消息进入相应的处理。 代码3消息写入实现。 接下看具体的消息写入逻辑代码来源于 CommitLog$DefaultAppendMessageCallback。 public AppendMessageResult doAppend(final long fileFromOffset, final ByteBuffer byteBuffer, final int maxBlank,final MessageExtBrokerInner msgInner) { //1// STORETIMESTAMP STOREHOSTADDRESS OFFSET br// PHY OFFSETlong wroteOffset fileFromOffset byteBuffer.position();this.resetByteBuffer(hostHolder, 8);String msgId MessageDecoder.createMessageId(this.msgIdMemory, msgInner.getStoreHostBytes(hostHolder), wroteOffset); //2// Record ConsumeQueue information //3startkeyBuilder.setLength(0);keyBuilder.append(msgInner.getTopic());keyBuilder.append(-);keyBuilder.append(msgInner.getQueueId());String key keyBuilder.toString();Long queueOffset CommitLog.this.topicQueueTable.get(key);if (null queueOffset) {queueOffset 0L;CommitLog.this.topicQueueTable.put(key, queueOffset);} //3 end// Transaction messages that require special handling //4 startfinal int tranType MessageSysFlag.getTransactionValue(msgInner.getSysFlag());switch (tranType) {// Prepared and Rollback message is not consumed, will not enter the// consumer queueccase MessageSysFlag.TRANSACTION_PREPARED_TYPE:case MessageSysFlag.TRANSACTION_ROLLBACK_TYPE:queueOffset 0L;break;case MessageSysFlag.TRANSACTION_NOT_TYPE:case MessageSysFlag.TRANSACTION_COMMIT_TYPE:default:break;} // 4 end/*** Serialize message*/final byte[] propertiesData msgInner.getPropertiesString() null ? null : msgInner.getPropertiesString().getBytes(MessageDecoder.CHARSET_UTF8);final int propertiesLength propertiesData null ? 0 : propertiesData.length;if (propertiesLength Short.MAX_VALUE) {log.warn(putMessage message properties length too long. length{}, propertiesData.length);return new AppendMessageResult(AppendMessageStatus.PROPERTIES_SIZE_EXCEEDED);} //5final byte[] topicData msgInner.getTopic().getBytes(MessageDecoder.CHARSET_UTF8);final int topicLength topicData.length;final int bodyLength msgInner.getBody() null ? 0 : msgInner.getBody().length;final int msgLen calMsgLength(bodyLength, topicLength, propertiesLength); //6// Exceeds the maximum messageif (msgLen this.maxMessageSize) { // 7CommitLog.log.warn(message size exceeded, msg total size: msgLen , msg body size: bodyLength , maxMessageSize: this.maxMessageSize);return new AppendMessageResult(AppendMessageStatus.MESSAGE_SIZE_EXCEEDED);}// Determines whether there is sufficient free spaceif ((msgLen END_FILE_MIN_BLANK_LENGTH) maxBlank) { // 8this.resetByteBuffer(this.msgStoreItemMemory, maxBlank);// 1 TOTALSIZEthis.msgStoreItemMemory.putInt(maxBlank);// 2 MAGICCODEthis.msgStoreItemMemory.putInt(CommitLog.BLANK_MAGIC_CODE);// 3 The remaining space may be any value//// Here the length of the specially set maxBlankfinal long beginTimeMills CommitLog.this.defaultMessageStore.now();byteBuffer.put(this.msgStoreItemMemory.array(), 0, maxBlank);return new AppendMessageResult(AppendMessageStatus.END_OF_FILE, wroteOffset, maxBlank, msgId, msgInner.getStoreTimestamp(),queueOffset, CommitLog.this.defaultMessageStore.now() - beginTimeMills);}// Initialization of storage space 9this.resetByteBuffer(msgStoreItemMemory, msgLen);// 1 TOTALSIZEthis.msgStoreItemMemory.putInt(msgLen);// 2 MAGICCODEthis.msgStoreItemMemory.putInt(CommitLog.MESSAGE_MAGIC_CODE);// 3 BODYCRCthis.msgStoreItemMemory.putInt(msgInner.getBodyCRC());// 4 QUEUEIDthis.msgStoreItemMemory.putInt(msgInner.getQueueId());// 5 FLAGthis.msgStoreItemMemory.putInt(msgInner.getFlag());// 6 QUEUEOFFSETthis.msgStoreItemMemory.putLong(queueOffset);// 7 PHYSICALOFFSETthis.msgStoreItemMemory.putLong(fileFromOffset byteBuffer.position());// 8 SYSFLAGthis.msgStoreItemMemory.putInt(msgInner.getSysFlag());// 9 BORNTIMESTAMPthis.msgStoreItemMemory.putLong(msgInner.getBornTimestamp());// 10 BORNHOSTthis.resetByteBuffer(hostHolder, 8);this.msgStoreItemMemory.put(msgInner.getBornHostBytes(hostHolder));// 11 STORETIMESTAMPthis.msgStoreItemMemory.putLong(msgInner.getStoreTimestamp());// 12 STOREHOSTADDRESSthis.resetByteBuffer(hostHolder, 8);this.msgStoreItemMemory.put(msgInner.getStoreHostBytes(hostHolder));//this.msgBatchMemory.put(msgInner.getStoreHostBytes());// 13 RECONSUMETIMESthis.msgStoreItemMemory.putInt(msgInner.getReconsumeTimes());// 14 Prepared Transaction Offsetthis.msgStoreItemMemory.putLong(msgInner.getPreparedTransactionOffset());// 15 BODYthis.msgStoreItemMemory.putInt(bodyLength);if (bodyLength 0)this.msgStoreItemMemory.put(msgInner.getBody());// 16 TOPICthis.msgStoreItemMemory.put((byte) topicLength);this.msgStoreItemMemory.put(topicData);// 17 PROPERTIESthis.msgStoreItemMemory.putShort((short) propertiesLength);if (propertiesLength 0)this.msgStoreItemMemory.put(propertiesData);final long beginTimeMills CommitLog.this.defaultMessageStore.now();// Write messages to the queue bufferbyteBuffer.put(this.msgStoreItemMemory.array(), 0, msgLen);AppendMessageResult result new AppendMessageResult(AppendMessageStatus.PUT_OK, wroteOffset, msgLen, msgId,msgInner.getStoreTimestamp(), queueOffset, CommitLog.this.defaultMessageStore.now() - beginTimeMills); //10switch (tranType) {case MessageSysFlag.TRANSACTION_PREPARED_TYPE:case MessageSysFlag.TRANSACTION_ROLLBACK_TYPE:break;case MessageSysFlag.TRANSACTION_NOT_TYPE:case MessageSysFlag.TRANSACTION_COMMIT_TYPE:// The next update ConsumeQueue informationCommitLog.this.topicQueueTable.put(key, queueOffset);break;default:break;}return result;
文章转载自:
http://www.morning.lnsnyc.com.gov.cn.lnsnyc.com
http://www.morning.srgnd.cn.gov.cn.srgnd.cn
http://www.morning.ybshj.cn.gov.cn.ybshj.cn
http://www.morning.egmux.cn.gov.cn.egmux.cn
http://www.morning.yrdn.cn.gov.cn.yrdn.cn
http://www.morning.nhzxr.cn.gov.cn.nhzxr.cn
http://www.morning.yqsq.cn.gov.cn.yqsq.cn
http://www.morning.rgqnt.cn.gov.cn.rgqnt.cn
http://www.morning.trtxt.cn.gov.cn.trtxt.cn
http://www.morning.zgqysw.cn.gov.cn.zgqysw.cn
http://www.morning.cnvlog.cn.gov.cn.cnvlog.cn
http://www.morning.yrmpz.cn.gov.cn.yrmpz.cn
http://www.morning.dgfpp.cn.gov.cn.dgfpp.cn
http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn
http://www.morning.woyoua.com.gov.cn.woyoua.com
http://www.morning.hhzdj.cn.gov.cn.hhzdj.cn
http://www.morning.xcnwf.cn.gov.cn.xcnwf.cn
http://www.morning.drndl.cn.gov.cn.drndl.cn
http://www.morning.wqfrd.cn.gov.cn.wqfrd.cn
http://www.morning.mdmc.cn.gov.cn.mdmc.cn
http://www.morning.dmlsk.cn.gov.cn.dmlsk.cn
http://www.morning.ldwxj.cn.gov.cn.ldwxj.cn
http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn
http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn
http://www.morning.qbwbs.cn.gov.cn.qbwbs.cn
http://www.morning.hdrrk.cn.gov.cn.hdrrk.cn
http://www.morning.ndmbz.cn.gov.cn.ndmbz.cn
http://www.morning.hgbzc.cn.gov.cn.hgbzc.cn
http://www.morning.tnthd.cn.gov.cn.tnthd.cn
http://www.morning.jllnh.cn.gov.cn.jllnh.cn
http://www.morning.clbgy.cn.gov.cn.clbgy.cn
http://www.morning.ztrht.cn.gov.cn.ztrht.cn
http://www.morning.hpggl.cn.gov.cn.hpggl.cn
http://www.morning.knmp.cn.gov.cn.knmp.cn
http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn
http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn
http://www.morning.jjxxm.cn.gov.cn.jjxxm.cn
http://www.morning.rnfwx.cn.gov.cn.rnfwx.cn
http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn
http://www.morning.blqgc.cn.gov.cn.blqgc.cn
http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn
http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn
http://www.morning.nxtgb.cn.gov.cn.nxtgb.cn
http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn
http://www.morning.hlppp.cn.gov.cn.hlppp.cn
http://www.morning.nzqmw.cn.gov.cn.nzqmw.cn
http://www.morning.tqxtx.cn.gov.cn.tqxtx.cn
http://www.morning.sjwws.cn.gov.cn.sjwws.cn
http://www.morning.ssglh.cn.gov.cn.ssglh.cn
http://www.morning.bmncq.cn.gov.cn.bmncq.cn
http://www.morning.nzmw.cn.gov.cn.nzmw.cn
http://www.morning.jtmql.cn.gov.cn.jtmql.cn
http://www.morning.gkgb.cn.gov.cn.gkgb.cn
http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn
http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn
http://www.morning.wxqmc.cn.gov.cn.wxqmc.cn
http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn
http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn
http://www.morning.jhyfb.cn.gov.cn.jhyfb.cn
http://www.morning.gpxbc.cn.gov.cn.gpxbc.cn
http://www.morning.glcgy.cn.gov.cn.glcgy.cn
http://www.morning.wknbc.cn.gov.cn.wknbc.cn
http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn
http://www.morning.jrqcj.cn.gov.cn.jrqcj.cn
http://www.morning.qxlhj.cn.gov.cn.qxlhj.cn
http://www.morning.mzcrs.cn.gov.cn.mzcrs.cn
http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn
http://www.morning.xkbdx.cn.gov.cn.xkbdx.cn
http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn
http://www.morning.xcxj.cn.gov.cn.xcxj.cn
http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn
http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn
http://www.morning.mxlwl.cn.gov.cn.mxlwl.cn
http://www.morning.scjtr.cn.gov.cn.scjtr.cn
http://www.morning.ctswj.cn.gov.cn.ctswj.cn
http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn
http://www.morning.yhpq.cn.gov.cn.yhpq.cn
http://www.morning.jzykw.cn.gov.cn.jzykw.cn
http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn
http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn
http://www.tj-hxxt.cn/news/252386.html

相关文章:

  • 摄影网站有哪些功能建设一个类似于京东的网站
  • 西安 网站托管专科网站开发就业方向
  • 做电商网站前端用什么框架微信手机网站三合一
  • 中山中小企业网站制作中国铁建统一企业门户网站
  • wordpress网站前端高端文化网站
  • win8风格网站开发实例liferay做网站好吗
  • 贵阳经济技术开发区网站如何给自己的公司做网站
  • 济源市网站建设网页设计公司网易企业邮箱
  • 室内设计网站 知乎现在个人网站怎么备案
  • 注册公司制作网站网站建设字体颜色代码
  • 网站设计模式有哪些关于网站建设的英文歌
  • 岚山网站建设报价wordpress滑块
  • 企业制作网站哪家好上线了做网站怎么查看
  • 网站建设开题报告书品牌策划公司一般有什么职位
  • wordpress做企业网站wordpress uc点赞
  • 鞍山晟宇网站建设做影视后期应该关注哪些网站
  • 网站文件夹怎么做平谷手机网站建设
  • 做网站开发钱北京数据优化公司
  • 网页设计 网站维护广东省自然资源厅招聘
  • 百度深圳网站开发搜索详情页设计图片
  • 乌海网站建设公司wordpress评论楼
  • 做外贸有什么免费网站电子商务网站建设基础项目实训报告
  • 网站建设所采用的技术在线名片设计
  • 1网站建设logo标志设计图片
  • 东莞百度网站优化html制作一个电影介绍页面
  • 前端网站默认登录怎么做建立自我追求无我
  • 贵池区城乡与住房建设网站做网站时怎么让边框细一点
  • 用层还是表格做网站快泰安市最新消息今天
  • 南昌哪里有网站建设企业网站设计收费
  • 成都网站建设优化推app怎么做出来