版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
微服務(wù)系課程安項目介,商城+開發(fā),該項目根據(jù)某大型知名企業(yè)互聯(lián)網(wǎng)互聯(lián)網(wǎng)項目而來,使用微服務(wù)技術(shù),頁面使用小米界面。功能包含模塊,會員、SSO、訂單、商品、支付、消息、、H5和PC、移動端、券、系統(tǒng)、任務(wù)調(diào)度等模塊。,系統(tǒng)特系統(tǒng)架項目演變過N作才能完成業(yè)務(wù)流程子系統(tǒng)之間通訊使用RPC項目拆在大型項目中,會將一個大的項目,拆分成N多個子模塊,分配給不同的團(tuán)隊開發(fā)。團(tuán)隊之間通訊采用RPC調(diào)用技術(shù)、使用Http+Restful+Json傳輸。H5項目 使用技SpringBoot+SpringCloud+Maven+Redis+ActiveMQ+XXLJOB(分布式任務(wù)調(diào)度)+marker等。使用SpringCloudEureka作為中心、Feign客戶端調(diào)用工具、斷路器Hystrix消息中間件使用ActiveMQ、分布式任務(wù)調(diào)度系統(tǒng)使用XXLJOB、反向工具使用數(shù)據(jù)安全加密使用MD5加鹽和Base64、RSA、分布式文件系統(tǒng)FastDFS等。支付網(wǎng)關(guān)接口使用支付寶、第登錄使用QQ等。 api h5創(chuàng)建環(huán)境搭搭建eureka中<artifactId>spring-boot-starter-<project.build.sourceEncoding>UTF-<project.reporting.outputEncoding>UTF-集成commons工具類<artifactId>commons-集成lombok集成redis<artifactId>spring-boot-starter-data-集成aop<artifactId>spring-boot-starter-集成web<artifactId>spring-boot-starter-springboot整合activemq<artifactId>spring-boot-starter-<!--集成發(fā)送郵件<artifactId>spring-boot-starter-集成mysql<artifactId>mysql-connector-<artifactId>spring-boot-starter-阿里巴巴數(shù)據(jù)源<!-- --<groupId>commons- <artifactId>commons- <artifactId>spring-context-<groupId>commons-<artifactId>commons-<artifactId>spring-cloud-starter-eureka-<artifactId>spring-cloud-starter-<artifactId>spring-cloud-<artifactId>spring-boot-maven- Maven<artifactId>itmayiedu-shopp-<version>0.0.1-<artifactId>spring-boot-starter-data-Maven<artifactId>itmayiedu-shopp-<version>0.0.1-<artifactId>itmayiedu-shopp-<version>0.0.1-publicclassEureKaServerpublicstaticvoidmain(String[]args){SpringApplication.run(EureKaServer.class,args);publicclassEureKaServerpublicstaticvoidmain(String[]args){SpringApplication.run(EureKaServer.class,args);}}port:8761hostname::registerWithEureka:falsefetchRegistry:falsedefaultZone:itmayiedu-shopp-api工程,存放所有的需要提供給外部接口項創(chuàng)建MemberService測試接 publicinterfaceMemberService{@RequestMap("/testRest")publicMap<String,Object>}Maven<artifactId>itmayiedu-shopp-member-<version>0.0.1-<version>0.0.1-springboot整合mybatis<artifactId>mybatis-spring-boot-port:#context-path:/member:defaultZone:name:publicclassMemberServiceImplimplementsMemberServicepublicMap<String,Object>testRest(){Map<String,Object>result=newHashMap<>();result.put("errorCode","200");result.put("errorMsg","success");return}}工具類封publicpublicclassResponseBase響應(yīng)privateInteger消息內(nèi)privateString返回privateObjectpublicpublicResponseBase()}publicResponseBase(Integercode,Stringmsg,Objectdata)this.code=code;this.msg=msg;this.data=data;}publicIntegergetCode()return}publicvoidsetCode(Integercode)this.code=}publicStringgetMsg()return}publicvoidsetMsg(Stringmsg)this.msg=}publicObjectgetData()return}publicvoidsetData(Objectdata)this.data=}}publicpublicclassBaseController返回成功,data值為publicpublicResponseBasesetResultSuccess()returnsetResult(Constants.HTTP_RES_CODE_200,Constants.HTTP_RES_CODE_200_VALUE,},datapublicResponseBasesetResultSuccess(Objectdata)returnsetResult(Constants.HTTP_RES_CODE_200,Constants.HTTP_RES_CODE_200_VALUE,}publicResponseBasesetResultError(StringreturnsetResult(Constants.HTTP_RES_CODE_500,msg,}publicResponseBasesetResult(Integercode,Stringmsg,Objectdata){ResponseBaseresponseBase=newResponseBase();if(data!=return}}ListUtilspublicpublicclassListUtilspublicList<?>emptyList(List<?>list)if(list==null||list.size()<=0){returnnull;}return}publicMap<?,?>emptyMap(Map<?,?>map){if(map==null||map.size()<=0){return}return}}}publicpublicinterfaceConstants響應(yīng)StringHTTP_RES_CODE_NAME=響應(yīng)StringHTTP_RES_CODE_MSG=響應(yīng)StringHTTP_RES_CODE_DATA=響應(yīng)請求成StringHTTP_RES_CODE_200_VALUE=系統(tǒng)錯StringHTTP_RES_CODE_500_VALUE=響應(yīng)請求成功IntegerHTTP_RES_CODE_200=系統(tǒng)錯IntegerHTTP_RES_CODE_500=}@SuppressWarnings({@SuppressWarnings({"rawtypes","unchecked"})publicclassBaseRedisService{privateStringRedisTemtestringRedisTempublicvoidsetString(Stringkey,Objectdata,Longtimeout){if(datainstanceofString){Stringvalue=(String) te.opsForValue().set(key,}if(timeout!=null)stringRedisTemte.expire(key,timeout,}}publicObjectgetString(Stringkey)returnstringRedisTem}publicvoiddelKey(Stringkey){publicvoiddelKey(Stringkey){}}Linuxlinux安裝Redis的是:(這里的是Linux版LinuxRedis進(jìn)行講解。在windows系統(tǒng)中好Redis的源碼包。通過WinSCP工具,將Redis的源碼windows上傳到Linux系統(tǒng)的這個目錄/opt/redis(即根 下的lamp文件夾)。tar-zxfredis- cdredis-2.6.17 (一般來說,解壓 里的INSTALL文件或README文(注意,編譯需要Cgccgcc??梢允褂胷pm-qgccgcc是否安裝)(利用yum安裝gcc yum-yinstallgcc(makeclean清除臨時文件。之后,找到出錯的原因,解決問題后再來重新安裝。) cdmake到此就安裝完成。但是,由于安裝redis的時候,我們沒有選擇安裝路徑,故是默認(rèn) cdmkdir-p/usr/local/redis/binmkdir-p/usr/local/redis/etccd/lamp/redis-2.6.17mv./redis.conf/usr/local/redis/etccdsrcmvmkreleasehdr.shredis-benarkredis-check-aofredis-check-dumpredis-cliredis-serverredis-sentinel/usr/local/redis/binlinux6379/etc/sysconfig/iptables文件:vi加入內(nèi)容并保存:-ARH-Firewall-1-INPUTmstate–stateNEWmtcpptcp–dport6379-jACCEPT重啟服務(wù):/etc/init.d/iptables查看端口是否開放:/sbin/iptablesL3redis-cli:Redis客戶端程序,它是一個命令行操作工具。也可以使用net根據(jù)其redis-benark:Redis性能測試工具,測試Redis在你的系統(tǒng)及配置下的讀寫Redis的啟動命令或cd./redis-server redis.conf文daemonizeyes---修改為 啟requirepass psaux|grep ---kill159886---kill99886---serviceiptablesstopredis命令連接方./redis-cli-h-p6379-a"123456" ---redis使用賬號連接結(jié)果表示成功SpringBoot步驟引入依Redis封裝publicclassBaseRedisService{publicclassBaseRedisService{publicvoidsetString(Stringkey,Objectdata){setString(key,data,null);}publicvoidsetString(Stringkey,Objectdata,Longtimeout)if(datainstanceofString){Stringvalue=(String)data;stringRedisTemte.opsForValue().set(key,}if(timeout!=null)}}publicpublicStringgetString(Stringkey)return(String) }publicvoiddelKey(Stringkey){}}host:password:port:6379max-idle:min-idle:max-active:max-wait:- publicResponseBasesetRedisTest(Stringkey,Stringvalue);publicResponseBasegetRedis(StringpublicResponseBasesetRedisTest(Stringkey,Stringvalue){baseRedisService.setString(key,value);return}publicResponseBasegetRedis(Stringkey)Stringvalue=returnreturn}lomBoklombok.jarlombok.jar包Lombok.jarJavajarD:\software\lombok.jarD:\software\lombok.jarwindowslombok.jar所在的位置數(shù)秒后將彈出一框,以確認(rèn)eclipse的安裝路徑</code>確認(rèn)完eclipse的安裝路徑后,點擊install/update按鈕,即可安裝完安裝完成之后,請確認(rèn)eclipse安裝路徑下是否多了一個lombok.jar包,并且配置文件eclipse.ini中是否添加了如下內(nèi)容:那么恭喜你已經(jīng)安裝成功,否則將缺少的部分添加到相應(yīng)的位置即可eclipseLombok使用注解版本,生成getset方法、簡化重復(fù)代Maven集成lombokgetsetpublicclassTestEntity{privateStringuserId;privateStringpublicStringgetUserId()return}publicvoidsetUserId(StringuserId)this.userId=}publicStringgetUserName()return}publicvoidsetUserName(StringuserName)this.userName=}publicstaticvoidmain(String[]args)new}}publicclassMemberServiceImplextendsBaseApiRedisServiceimplementsMemberServiceprivateBaseRedisServicepublicMap<String,Object>index(){Stringresult="644064"; indexreturnsetResu}}aop申明是個spring管理的beanpublicclassLogAspectServiceApiprivateJSONObjectjsonObject=new申明一個切點面是execution表達(dá)@Pointcut("execution(public*com.itmayiedu.service.*.*(..))")privatevoidcontrollerAspect(){}//請求method前打印@Before(value=publicvoidmethodBefore(JoinPointjoinPoint)ServletRequestAttributesrequestAttributes=HttpServletRequestrequest=("===============請求內(nèi)容try//打印請求內(nèi)("請求地址("請求方式("請求類方法("請求類方法參數(shù)}catch(Exceptione)log.error("###LogAspectServiceApi.classmethodBefore()###ERROR:",}("===============請求內(nèi)容}//在方法執(zhí)行完結(jié)后打印返回內(nèi)@AfterReturning(returning="o",pointcut="controllerAspect()")publicvoidmethodAfterReturing(Objecto){("--------------返回內(nèi) ("Response內(nèi)容}catch(Exceptione)log.error("###LogAspectServiceApi.classmethodAfterReturing()###ERROR:",}("--------------返回內(nèi) }}publicclassDateUtils/**年-月-:分://publicstaticStringDATE_TO_STRING_DETAIAL_PATTERN="yyyy-MM-dd/**年-月-publicstaticStringDATE_TO_STRING_SHORT_PATTERN="yyyy-MM-dd";privatestaticSimpleDateFormatsimpleDateFormat;*@param@parampublicstaticStringDateToString(Datesource,Stringpattern)simpleDateFormat=newSimpleDateFormat(pattern);returnsimpleDateFormat.format(source);}* @param@parampublicstaticStringtimeStampToString(longsource,Stringpattern)simpleDateFormat=newSimpleDateFormat(pattern);Datedate=newDate(source*1000);return}@parampublicstaticlongdateToTimeStamp(Datedate){Timestamptimestamp=newTimestamp(date.getTime());returntimestamp.getTime()/1000;}@param@parampublicstaticDatestringToDate(Stringsource,Stringpattern)simpleDateFormat=newSimpleDateFormat(pattern);Datedate=null;trydate=}catch(ParseExceptione)log.error("字符串轉(zhuǎn)換日期異常}return}*@parampublicstaticStringcurrentFormatDate(Stringpattern){simpleDateFormat=newSimpleDateFormat(pattern);returnsimpleDateFormat.format(newDate());}publicstaticlongcurrentTimeStamp(){returnSystem.currentTimeMillis()/1000;}:@param:publicstaticTimestampgetTimestamp()returnnewTimestamp(new}publicpublicclassMD5UtilpublicfinalstaticStringMD5(Strings){trybyte[]btInput=//獲得 算法的MessageDigest對MessageDigestMessageDigestmdInst=byte[]md=intj=charstr[]=newchar[j*2];intk=0;for(inti=0;i<j;i++){bytebyte0=md[i];str[k++]=hexDigits[byte0>>>4&0xf];str[k++]=hexDigits[byte0&0xf];}returnnew}catch(Exceptione){returnnull;}}publicstaticvoidmain(String[]args){ }}MySQLMavenspringboot整合mybatis<artifactId>mybatis-spring-boot-namememberhost:password:port:6379max-idle:min-idle:max-active:max-wait1name:url:jdbc:mysql://:3306/itmayiedu-memberusername:rootpassword:使用druidtype:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.jdbc.Driverfilters:statmaxActive:initialSize:maxWait:minIdle:timeBetweenEvictionRunsMillis:minEvictableIdleTimeMillis:300000validationQuery:select'x'testWhileIdle:truetestOnBorrow:falsetestOnReturn:falsepoolPreparedStatements:truemaxOpenPreparedStatements:20CREATECREATETABLEmb_useridbigint(20)NOTNULLusernameusernamevarchar(50NOTNULLCOMMENT用戶名passwordvarchar(32)NOTNULLCOMMENT ,加 phonevarchar(20)DEFAULTNULLCOMMENT號 郵箱createddatetimeNOTNULL,updateddatetimeNOTNULL,PRIMARYKEY(id),UNIQUEKEYusername(username)USINGUNIQUEKEYphone(phone)USINGUNIQUE()USING)ENGINE=InnoDBAUTO_INCREMENT=37DEFAULTCHARSET=utf8COMMENT='用戶表 INTO ,created,updated)VALUES('yushengjun3','','aa1@a','2015-04-0617:0355','2015-04-061703itmayiedu-shopp-member-apipublicclassUserEntityprivateIntegerprivateStringusername;privateStringpassword;privateStringphone;private;privateDateprivateDate}itmayiedu-shopp-memberDaopublicinterfaceUserDao@Select("select,created,updatedfrommb_userwhereidUserEntityfindByID(@Param("userId")Long@Insert("INSERTINTO`mb_user`,created,updated)VALUESIntegerinsertUser(UserEntity}}提供接口測試數(shù)據(jù)庫publicpublicResponseBasefindUser(LonguserId)UserEntityuserEntity=returnsetResultError("為查找到該用戶信息}return}會員服務(wù)接新增用戶接publicpublicResponseBaseregister(@RequestBodyUserEntityuser){StringpassWord=user.getPassword();Stringne IntegerinsertUser=if(insertUser<=0)}return}請求地001:8762/member/register請求參{"":"yushengjun2018@163com","updated":"2018-03-}調(diào)用消息發(fā)送郵MQ接口協(xié)議定{{"header":}Maven<artifactId>spring-boot-starter-配置文件新增信broker-url:tcp://localhost:61616in-memory:trueenabled:queue:publicclassRegisterMailboxProducer{private tejmsMessagingTempublicvoidsendMsg(Destinationdestination,Stringjson){jmsMessagingTemte.convertAndSend(destination,json);}}生產(chǎn)者發(fā)送郵publicResponseBaseregister(@RequestBodyUserEntityuser){StringpassWord=user.getPassword();Stringne ssWord=MD5Util.MD5(passWord); IntegerinsertUser=if(insertUser<=0)return 失敗}采用MQ異步發(fā)送郵=StringmessAageJson=return}privateStringmessage(Stringmail)JSONObjectroot=newJSONObject();JSONObjectheader=newJSONObject();header.put("interfaceType","sms_mail");JSONObjectcontent=newJSONObject();content.put("mail",mail);root.put("header",header);root.put("content",root.put("content",return}privatevoidsendMsg(Stringjson)ActiveMQQueueactiveMQQueue=newActiveMQQueue(MESSAGESQUEUE);registerMailboxProducer.sendMsg(activeMQQueue,json);}}publicpublicclassTokenUtilspublicstaticStringreturn}}實請求地請求參{username:644069password:}返回參{rtnCode:200,msg:success,data:{token:MEMBER_TOKEN9f4190cc-ed49-49ab-ac4b-}}publicpublicResponseBaselogin(@RequestBodyUserEntityuser){Stringusername=user.getUsername();if(StringUtils.isEmpty(username))returnsetResultError("用戶名稱不能為空}Stringpassword=if(StringUtils.isEmpty(password))return 不能為空}String ssWord=UserEntityuserEntity=memberDao.login(username,neif(userEntity==null)returnsetResultError("賬號或錯誤}生成Stringtoken=TokenUtils.getToken();baseRedisService.setString(token,userEntity.getId()+"",null);JSONObjectJSONObject=newJSONObject();JSONObject.put("token",token);return}token請求地請求參token=MEMBER_TOKEN9f4190cc-ed49-49ab-ac4b-返回參{rtnCode:200,msg:success,data:{id:username:644069password:null,phone:null,:yush created:updated:}}publicResponseBasefinT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度餐飲行業(yè)冷鏈配送與質(zhì)量追溯體系合同3篇
- 鄭州科技學(xué)院《風(fēng)景人像基礎(chǔ)教程》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025版互聯(lián)網(wǎng)金融服務(wù)委托理財合同范本庫3篇
- 2025年行政合同簽訂及管理中行政優(yōu)先權(quán)的法律風(fēng)險防范指南2篇
- 美容院股份轉(zhuǎn)讓服務(wù)協(xié)議(2025版)2篇
- 二零二五版美容美發(fā)行業(yè)美容院品牌推廣服務(wù)合同4篇
- 2025年度個人反擔(dān)保協(xié)議樣本:教育機(jī)構(gòu)貸款融資專用4篇
- 2025版全面升級危險品物流運(yùn)輸合同范本3篇
- 西安市2025年度汽車租賃企業(yè)服務(wù)質(zhì)量評價體系3篇
- 2025年度菜鳥驛站綠色物流體系建設(shè)與推廣合同3篇
- 圓周率的認(rèn)識
- 基于SMT求解器的分支條件覆蓋測試
- 反騷擾政策程序
- 運(yùn)動技能學(xué)習(xí)與控制課件第十一章運(yùn)動技能的練習(xí)
- 射頻在疼痛治療中的應(yīng)用
- 四年級數(shù)學(xué)豎式計算100道文檔
- “新零售”模式下生鮮電商的營銷策略研究-以盒馬鮮生為例
- 項痹病辨證施護(hù)
- 懷化市數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展概況及未來投資可行性研究報告
- 07FD02 防空地下室電氣設(shè)備安裝
- 教師高中化學(xué)大單元教學(xué)培訓(xùn)心得體會
評論
0/150
提交評論