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

创建网站要多长时间做团餐 承包食堂的企业网站

创建网站要多长时间,做团餐 承包食堂的企业网站,企业信用公示信息网官网网址,河北网站建设多少钱文章目录一.技术方案二.页面发布——消费方1.需求分析2.创建Cms Client工程1#xff09;创建maven工程2#xff09;配置文件3#xff09;启动类3.RabbitmqConfig配置类4.定义消息格式5.PageDao1#xff09;使用CmsPageRepository 查询页面信息2#xff09;使用CmsSiteRepo… 文章目录一.技术方案二.页面发布——消费方1.需求分析2.创建Cms Client工程1创建maven工程2配置文件3启动类3.RabbitmqConfig配置类4.定义消息格式5.PageDao1使用CmsPageRepository 查询页面信息2使用CmsSiteRepository查询站点信息主要获取站点物理路径6.PageService7.ConsumerPostPage三.页面发布——生产方1.需求分析2.RabbitMQ配置1配置Rabbitmq的连接参数2在pom.xml添加依赖3RabbitMQConfig配置3.Api接口4.PageService5.CmsPageController四.页面发布——前端1.API方法2.页面1修改page_list.vue添加发布按钮2添加页面发布事件五.测试一.技术方案 本项目使用MQ实现页面发布的技术方案如下 技术方案说明 1、平台包括多个站点页面归属不同的站点。 2、发布一个页面应将该页面发布到所属站点的服务器上。 3、每个站点服务部署cms client程序并与交换机绑定绑定时指定站点Id为routingKey。指定站点id为routingKey就可以实现cms client只能接收到所属站点的页面发布消息。 4、页面发布程序向MQ发布消息时指定页面所属站点Id为routingKey将该页面发布到它所在服务器上的cms client。 路由模式分析如下 发布一个页面需发布到该页面所属的每个站点服务器其它站点服务器不发布。 比如发布一个门户的页面需要发布到每个门户服务器上而用户中心服务器则不需要发布。 所以本项目采用routing模式用站点id作为routingKey这样就可以匹配页面只发布到所属的站点服务器上。 页面发布流程图如下 1、前端请求cms执行页面发布。 2、cms执行静态化程序生成html文件。 3、cms将html文件存储到GridFS中。 4、cms向MQ发送页面发布消息。 5、MQ将页面发布消息通知给Cms Client。 6、Cms Client从GridFS中下载html文件。 7、Cms Client将html保存到所在服务器指定目录。 二.页面发布——消费方 1.需求分析 功能分析 创建Cms Client工程作为页面发布消费方将Cms Client部署在多个服务器上它负责接收到页面发布的消息后从GridFS中下载文件在本地保存。 需求如下 1、将cms Client部署在服务器配置队列名称和站点ID。 2、cms Client连接RabbitMQ并监听各自的“页面发布队列” 3、cms Client接收页面发布队列的消息 4、根据消息中的页面id从mongodb数据库下载页面到本地 调用dao查询页面信息cmspage获取到页面的物理路径调用dao查询站点信息得到站点的物理路径 服务器物理路径站点物理路径页面物理路径页面名称。 从GridFS查询静态文件内容将静态文件内容保存到服务器物理路径下。 2.创建Cms Client工程 创建工程 xc-service-manage-cms-client 文件路径xcEduService01\xc-service-manage-cms-client 1创建maven工程 文件位置xcEduService01\xc-service-manage-cms-client\pom.xml ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdxc-framework-parent/artifactIdgroupIdcom.xuecheng/groupIdversion1.0-SNAPSHOT/versionrelativePath../xc-framework-parent/pom.xml/relativePath/parentmodelVersion4.0.0/modelVersionartifactIdxc-service-manage-cms-client/artifactIddependenciesdependencygroupIdcom.xuecheng/groupIdartifactIdxc-framework-model/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-mongodb/artifactId/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-io/artifactId/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactId/dependency/dependencies /project2配置文件 在resources下配置application.yml和logback-spring.xml 文件位置xcEduService01\xc-service-manage-cms-client\src\main\resources\application.yml server:port: 31000 spring:application:name: xc-service-manage-cms-clientdata:mongodb:uri: mongodb://root:123localhost:27017database: xc_cmsrabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guestvirtualHost: / xuecheng:mq:#cms客户端监控的队列名称不同的客户端监控的队列不能重复queue: queue_cms_postpage_01routingKey: 5a751fab6abb5044e0d19ea1 #此routingKey为门户站点ID说明在配置文件中配置队列的名称每个 cms client在部署时注意队列名称不要重复 3启动类 文件位置xcEduService01\xc-service-manage-cms-client\src\main\java\com\xuecheng\manage_cms_client\ManageCmsClientApplication.java package com.xuecheng.manage_cms_client;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.ComponentScan;SpringBootApplication EntityScan(com.xuecheng.framework.domain.cms)//扫描实体类 ComponentScan(basePackages{com.xuecheng.framework})//扫描common包下的类 ComponentScan(basePackages{com.xuecheng.manage_cms_client})//扫描本项目下的所有类 public class ManageCmsClientApplication {public static void main(String[] args) {SpringApplication.run(ManageCmsClientApplication.class,args);} } 3.RabbitmqConfig配置类 文件位置xcEduService01\xc-service-manage-cms-client\src\main\java\com\xuecheng\manage_cms_client\config\RabbitmqConfig.java package com.xuecheng.manage_cms_client.config;import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** author Administrator* version 1.0**/ Configuration public class RabbitmqConfig {//队列bean的名称public static final String QUEUE_CMS_POSTPAGE queue_cms_postpage;//交换机的名称public static final String EX_ROUTING_CMS_POSTPAGEex_routing_cms_postpage;//队列的名称Value(${xuecheng.mq.queue})public String queue_cms_postpage_name;//routingKey 即站点IdValue(${xuecheng.mq.routingKey})public String routingKey;/*** 交换机配置使用direct类型* return the exchange*/Bean(EX_ROUTING_CMS_POSTPAGE)public Exchange EXCHANGE_TOPICS_INFORM() {return ExchangeBuilder.directExchange(EX_ROUTING_CMS_POSTPAGE).durable(true).build();}//声明队列Bean(QUEUE_CMS_POSTPAGE)public Queue QUEUE_CMS_POSTPAGE() {Queue queue new Queue(queue_cms_postpage_name);return queue;}/*** 绑定队列到交换机** param queue the queue* param exchange the exchange* return the binding*/Beanpublic Binding BINDING_QUEUE_INFORM_SMS(Qualifier(QUEUE_CMS_POSTPAGE) Queue queue, Qualifier(EX_ROUTING_CMS_POSTPAGE) Exchange exchange) {return BindingBuilder.bind(queue).to(exchange).with(routingKey).noargs();}} 4.定义消息格式 消息内容采用json格式存储数据如下 页面id发布页面的id { pageId: }5.PageDao 1使用CmsPageRepository 查询页面信息 文件位置xcEduService01\xc-service-manage-cms-client\src\main\java\com\xuecheng\manage_cms_client\dao\CmsPageRepository.java package com.xuecheng.manage_cms_client.dao;import com.xuecheng.framework.domain.cms.CmsPage; import org.springframework.data.mongodb.repository.MongoRepository;public interface CmsPageRepository extends MongoRepositoryCmsPage,String {//根据页面名称查询CmsPage findByPageName(String pageName);//根据页面名称、站点Id、页面webpath查询CmsPage findByPageNameAndSiteIdAndPageWebPath(String pageName, String siteId, String pageWebPath); } 2使用CmsSiteRepository查询站点信息主要获取站点物理路径 文件位置xcEduService01\xc-service-manage-cms-client\src\main\java\com\xuecheng\manage_cms_client\dao\CmsSiteRepository.java package com.xuecheng.manage_cms_client.dao;import com.xuecheng.framework.domain.cms.CmsSite; import org.springframework.data.mongodb.repository.MongoRepository;public interface CmsSiteRepository extends MongoRepositoryCmsSite,String { } 6.PageService 在Service中定义保存页面静态文件到服务器物理路径方法 文件位置xcEduService01\xc-service-manage-cms-client\src\main\java\com\xuecheng\manage_cms_client\service\PageService.java package com.xuecheng.manage_cms_client.service;import com.mongodb.client.gridfs.GridFSBucket; import com.mongodb.client.gridfs.GridFSDownloadStream; import com.mongodb.client.gridfs.model.GridFSFile; import com.xuecheng.framework.domain.cms.CmsPage; import com.xuecheng.framework.domain.cms.CmsSite; import com.xuecheng.manage_cms_client.dao.CmsPageRepository; import com.xuecheng.manage_cms_client.dao.CmsSiteRepository; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.gridfs.GridFsResource; import org.springframework.data.mongodb.gridfs.GridFsTemplate; import org.springframework.stereotype.Service;import java.io.*; import java.util.Optional;/*** author Administrator* version 1.0**/ Service public class PageService {private static final Logger LOGGER LoggerFactory.getLogger(PageService.class);AutowiredGridFsTemplate gridFsTemplate;AutowiredGridFSBucket gridFSBucket;AutowiredCmsPageRepository cmsPageRepository;AutowiredCmsSiteRepository cmsSiteRepository;//保存html页面到服务器物理路径public void savePageToServerPath(String pageId){//根据pageId查询cmsPageCmsPage cmsPage this.findCmsPageById(pageId);//得到html的文件id从cmsPage中获取htmlFileId内容String htmlFileId cmsPage.getHtmlFileId();//从gridFS中查询html文件InputStream inputStream this.getFileById(htmlFileId);if(inputStream null){LOGGER.error(getFileById InputStream is null ,htmlFileId:{},htmlFileId);return ;}//得到站点idString siteId cmsPage.getSiteId();//得到站点的信息CmsSite cmsSite this.findCmsSiteById(siteId);//得到站点的物理路径String sitePhysicalPath cmsSite.getSitePhysicalPath();//得到页面的物理路径String pagePath sitePhysicalPath cmsPage.getPagePhysicalPath() cmsPage.getPageName();//将html文件保存到服务器物理路径上FileOutputStream fileOutputStream null;try {fileOutputStream new FileOutputStream(new File(pagePath));IOUtils.copy(inputStream,fileOutputStream);} catch (Exception e) {e.printStackTrace();}finally {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}//根据文件id从GridFS中查询文件内容public InputStream getFileById(String fileId){//文件对象GridFSFile gridFSFile gridFsTemplate.findOne(Query.query(Criteria.where(_id).is(fileId)));//打开下载流GridFSDownloadStream gridFSDownloadStream gridFSBucket.openDownloadStream(gridFSFile.getObjectId());//定义GridFsResourceGridFsResource gridFsResource new GridFsResource(gridFSFile,gridFSDownloadStream);try {return gridFsResource.getInputStream();} catch (IOException e) {e.printStackTrace();}return null;}//根据页面id查询页面信息public CmsPage findCmsPageById(String pageId){OptionalCmsPage optional cmsPageRepository.findById(pageId);if(optional.isPresent()){return optional.get();}return null;}//根据站点id查询站点信息public CmsSite findCmsSiteById(String siteId){OptionalCmsSite optional cmsSiteRepository.findById(siteId);if(optional.isPresent()){return optional.get();}return null;} } 7.ConsumerPostPage 在cms client工程的mq包下创建ConsumerPostPage类ConsumerPostPage作为发布页面的消费客户端监听 页面发布队列的消息收到消息后从mongodb下载文件保存在本地。 文件位置xcEduService01\xc-service-manage-cms-client\src\main\java\com\xuecheng\manage_cms_client\mq\ConsumerPostPage.java package com.xuecheng.manage_cms_client.mq;import com.alibaba.fastjson.JSON; import com.xuecheng.framework.domain.cms.CmsPage; import com.xuecheng.manage_cms_client.service.PageService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import java.util.Map;/*** 监听MQ接收页面发布消息* author Administrator* version 1.0**/ Component public class ConsumerPostPage {private static final Logger LOGGER LoggerFactory.getLogger(ConsumerPostPage.class);AutowiredPageService pageService;RabbitListener(queues {${xuecheng.mq.queue}})public void postPage(String msg){//解析消息Map map JSON.parseObject(msg, Map.class);//得到消息中的页面idString pageId (String) map.get(pageId);//校验页面是否合法CmsPage cmsPage pageService.findCmsPageById(pageId);if(cmsPage null){LOGGER.error(receive postpage msg,cmsPage is null,pageId:{},pageId);return ;}//调用service方法将页面从GridFs中下载到服务器pageService.savePageToServerPath(pageId);} } 三.页面发布——生产方 1.需求分析 管理员通过 cms系统发布“页面发布”的消费cms系统作为页面发布的生产方。 需求如下 1、管理员进入管理界面点击“页面发布”前端请求cms页面发布接口。 2、cms页面发布接口执行页面静态化并将静态化页面存储至GridFS中。 3、静态化成功后向消息队列发送页面发布的消息。 1 获取页面的信息及页面所属站点ID。 2 设置消息内容为页面ID。采用json格式方便日后扩展 3 发送消息给ex_cms_postpage交换机并将站点ID作为routingKey。 工程位置xcEduService01\xc-service-manage-cms 2.RabbitMQ配置 1配置Rabbitmq的连接参数 在application.yml添加如下配置 server:port: 31001 spring:application:name: xc-service-manage-cmsdata:mongodb:uri: mongodb://root:123localhost:27017database: xc_cmsrabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guestvirtualHost: /freemarker:cache: false #关闭模板缓存方便测试settings:template_update_delay: 02在pom.xml添加依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependency3RabbitMQConfig配置 由于cms作为页面发布方要面对很多不同站点的服务器面对很多页面发布队列所以这里不再配置队列只需要 配置交换机即可。 文件位置xcEduService01\xc-service-manage-cms\src\main\java\com\xuecheng\manage_cms\config\RabbitmqConfig.java package com.xuecheng.manage_cms.config;import org.springframework.amqp.core.Exchange; import org.springframework.amqp.core.ExchangeBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** author Administrator* version 1.0**/ Configuration public class RabbitmqConfig {//交换机的名称public static final String EX_ROUTING_CMS_POSTPAGEex_routing_cms_postpage;/*** 交换机配置使用direct类型* return the exchange*/Bean(EX_ROUTING_CMS_POSTPAGE)public Exchange EXCHANGE_TOPICS_INFORM() {return ExchangeBuilder.directExchange(EX_ROUTING_CMS_POSTPAGE).durable(true).build();}} 3.Api接口 在api工程定义页面发布接口 文件位置xcEduService01\xc-service-api\src\main\java\com\xuecheng\api\cms\CmsPageControllerApi.java //页面发布ApiOperation(页面发布)public ResponseResult post(String pageId);4.PageService 在PageService中定义页面发布方法代码如下 文件位置xcEduService01\xc-service-manage-cms\src\main\java\com\xuecheng\manage_cms\service\PageService.java //页面发布public ResponseResult post(String pageId){//执行页面静态化String pageHtml this.getPageHtml(pageId);//将页面静态化文件存储到GridFs中CmsPage cmsPage saveHtml(pageId, pageHtml);//向MQ发消息sendPostPage(pageId);return new ResponseResult(CommonCode.SUCCESS);}//向mq 发送消息private void sendPostPage(String pageId){//得到页面信息CmsPage cmsPage this.getById(pageId);if(cmsPage null){ExceptionCast.cast(CommonCode.INVALID_PARAM);}//创建消息对象MapString,String msg new HashMap();msg.put(pageId,pageId);//转成json串String jsonString JSON.toJSONString(msg);//发送给mq//站点idString siteId cmsPage.getSiteId();rabbitTemplate.convertAndSend(RabbitmqConfig.EX_ROUTING_CMS_POSTPAGE,siteId,jsonString);}//保存html到GridFSprivate CmsPage saveHtml(String pageId,String htmlContent){//先得到页面信息CmsPage cmsPage this.getById(pageId);if(cmsPage null){ExceptionCast.cast(CommonCode.INVALID_PARAM);}ObjectId objectId null;try {//将htmlContent内容转成输入流InputStream inputStream IOUtils.toInputStream(htmlContent, utf-8);//将html文件内容保存到GridFSobjectId gridFsTemplate.store(inputStream, cmsPage.getPageName());} catch (IOException e) {e.printStackTrace();}//将html文件id更新到cmsPage中cmsPage.setHtmlFileId(objectId.toHexString());cmsPageRepository.save(cmsPage);return cmsPage;}5.CmsPageController 编写Controller实现api接口接收页面请求调用service执行页面发布 文件位置xcEduService01\xc-service-manage-cms\src\main\java\com\xuecheng\manage_cms\controller\CmsPageController.java Override PostMapping(/postPage/{pageId}) public ResponseResult post(PathVariable(pageId) String pageId) {return pageService.post(pageId); }四.页面发布——前端 用户操作流程 1、用户进入cms页面列表。 2、点击“发布”请求服务端接口发布页面。 3、提示“发布成功”或发布失败。 1.API方法 在 cms前端添加 api方法 文件位置xc-ui-pc-sysmanage\src\module\cms\api\cms.js /*发布页面*/ export const page_postPage id { return http.requestPost(apiUrl/cms/page/postPage/id) }2.页面 文件位置xc-ui-pc-sysmanage\src\module\cms\page\page_list.vue 1修改page_list.vue添加发布按钮 el‐table‐column label发布 width80 template slot‐scopescope el‐button sizesmall typeprimary plain clickpostPage(scope.row.pageId)发布 /el‐button /template /el‐table‐column2添加页面发布事件 postPage (id) { this.$confirm(确认发布该页面吗?, 提示, { }).then(() { cmsApi.page_postPage(id).then((res) { if(res.success){ console.log(发布页面idid); this.$message.success(发布成功请稍后查看结果); }else{ this.$message.error(发布失败); } }); }).catch(() { }); },五.测试 这里测试轮播图页面修改、发布的流程 1、修改轮播图页面模板或修改轮播图地址 注意先修改页面原型页面原型调试正常后再修改页面模板。 2、执行页面预览 3、执行页面发布查看页面是否写到网站目录 4、刷新门户首页并观察轮播图是否变化。
http://www.zqtcl.cn/news/367053/

相关文章:

  • 深圳做网站什么公司好广州电商小程序开发
  • 郑州高新区做网站的公司如何欣赏网站
  • 网站做维恩图做网站的公司杭州
  • 柳州公司网站制作公司wordpress 网店
  • 网站增加栏目费用在网站开发中如何设置登录
  • 怎样用php做网站百度推广联系人
  • 怎么建立手机网站如何申请公司域名
  • 营销型网站怎么收费邓州企业网站
  • 北京建设官方网站邢台网站维护
  • 新余网站制作网站开发工资咋样
  • 襄阳网站建设外包自己做一个网站
  • 网站域名的后缀wordpress文章归类
  • 查询企业信息的官方网站大连建设网站公司
  • 网站建设 全包专业建设规划方案模板
  • 做网站好还是做微信小程序好浙江建设工程造价信息网站
  • 网站开发怎么报价推广普通话手抄报模板可打印
  • 好的平面网站模板企业网站建设浩森宇特
  • 做网站通过什么赚钱吗公司建设网站的费用
  • 如何做建筑一体化的网站视频网站开发应用到哪些技术
  • 巴中微信网站建设竞价托管一般多少钱
  • 彩票网站开发 违法股票网站排名哪个好
  • 宝格丽网站建设哈尔滨网站建设王道下拉強
  • 烟台网站建设的公司世界500强企业排名2021
  • 网络营销做得比较成功的案例吴中seo网站优化软件
  • 怎么设立网站美区下载的app怎么更新
  • 建立网站ppt做酒店网站所用到的算法
  • 上海网站建设的价格低太仓做网站的公司
  • 怎样登录建设互联网站怎么做中英文网站
  • 云网站7china中小企业网站建设好么
  • 美丽南方官网网站建设国际新闻最新消息今天摘抄