螞蟻課堂每特學(xué)院-2期互聯(lián)網(wǎng)微電商項(xiàng)目之會(huì)員系統(tǒng)服務(wù)平臺(tái)搭建_第1頁(yè)
螞蟻課堂每特學(xué)院-2期互聯(lián)網(wǎng)微電商項(xiàng)目之會(huì)員系統(tǒng)服務(wù)平臺(tái)搭建_第2頁(yè)
螞蟻課堂每特學(xué)院-2期互聯(lián)網(wǎng)微電商項(xiàng)目之會(huì)員系統(tǒng)服務(wù)平臺(tái)搭建_第3頁(yè)
螞蟻課堂每特學(xué)院-2期互聯(lián)網(wǎng)微電商項(xiàng)目之會(huì)員系統(tǒng)服務(wù)平臺(tái)搭建_第4頁(yè)
螞蟻課堂每特學(xué)院-2期互聯(lián)網(wǎng)微電商項(xiàng)目之會(huì)員系統(tǒng)服務(wù)平臺(tái)搭建_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微服務(wù)系課程安項(xiàng)目介,商城+開(kāi)發(fā),該項(xiàng)目根據(jù)某大型知名企業(yè)互聯(lián)網(wǎng)互聯(lián)網(wǎng)項(xiàng)目而來(lái),使用微服務(wù)技術(shù),頁(yè)面使用小米界面。功能包含模塊,會(huì)員、SSO、訂單、商品、支付、消息、、H5和PC、移動(dòng)端、券、系統(tǒng)、任務(wù)調(diào)度等模塊。,系統(tǒng)特系統(tǒng)架項(xiàng)目演變過(guò)N作才能完成業(yè)務(wù)流程子系統(tǒng)之間通訊使用RPC項(xiàng)目拆在大型項(xiàng)目中,會(huì)將一個(gè)大的項(xiàng)目,拆分成N多個(gè)子模塊,分配給不同的團(tuán)隊(duì)開(kāi)發(fā)。團(tuán)隊(duì)之間通訊采用RPC調(diào)用技術(shù)、使用Http+Restful+Json傳輸。H5項(xiàng)目 使用技SpringBoot+SpringCloud+Maven+Redis+ActiveMQ+XXLJOB(分布式任務(wù)調(diào)度)+marker等。使用SpringCloudEureka作為中心、Feign客戶(hù)端調(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工具類(lèi)<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工程,存放所有的需要提供給外部接口項(xiàng)創(chuàng)建MemberService測(cè)試接 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}}工具類(lèi)封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)請(qǐng)求成StringHTTP_RES_CODE_200_VALUE=系統(tǒng)錯(cuò)StringHTTP_RES_CODE_500_VALUE=響應(yīng)請(qǐng)求成功IntegerHTTP_RES_CODE_200=系統(tǒng)錯(cuò)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的源碼包。通過(guò)WinSCP工具,將Redis的源碼windows上傳到Linux系統(tǒng)的這個(gè)目錄/opt/redis(即根 下的lamp文件夾)。tar-zxfredis- cdredis-2.6.17 (一般來(lái)說(shuō),解壓 里的INSTALL文件或README文(注意,編譯需要Cgccgcc??梢允褂胷pm-qgccgcc是否安裝)(利用yum安裝gcc yum-yinstallgcc(makeclean清除臨時(shí)文件。之后,找到出錯(cuò)的原因,解決問(wèn)題后再來(lái)重新安裝。) cdmake到此就安裝完成。但是,由于安裝redis的時(shí)候,我們沒(méi)有選擇安裝路徑,故是默認(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查看端口是否開(kāi)放:/sbin/iptablesL3redis-cli:Redis客戶(hù)端程序,它是一個(gè)命令行操作工具。也可以使用net根據(jù)其redis-benark:Redis性能測(cè)試工具,測(cè)試Redis在你的系統(tǒng)及配置下的讀寫(xiě)Redis的啟動(dòng)命令或cd./redis-server redis.conf文daemonizeyes---修改為 啟requirepass psaux|grep ---kill159886---kill99886---serviceiptablesstopredis命令連接方./redis-cli-h-p6379-a"123456" ---redis使用賬號(hào)連接結(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的安裝路徑后,點(diǎn)擊install/update按鈕,即可安裝完安裝完成之后,請(qǐng)確認(rèn)eclipse安裝路徑下是否多了一個(gè)lombok.jar包,并且配置文件eclipse.ini中是否添加了如下內(nèi)容:那么恭喜你已經(jīng)安裝成功,否則將缺少的部分添加到相應(yīng)的位置即可eclipseLombok使用注解版本,生成getset方法、簡(jiǎn)化重復(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申明是個(gè)spring管理的beanpublicclassLogAspectServiceApiprivateJSONObjectjsonObject=new申明一個(gè)切點(diǎn)面是execution表達(dá)@Pointcut("execution(public*com.itmayiedu.service.*.*(..))")privatevoidcontrollerAspect(){}//請(qǐng)求method前打印@Before(value=publicvoidmethodBefore(JoinPointjoinPoint)ServletRequestAttributesrequestAttributes=HttpServletRequestrequest=("===============請(qǐng)求內(nèi)容try//打印請(qǐng)求內(nèi)("請(qǐng)求地址("請(qǐng)求方式("請(qǐng)求類(lèi)方法("請(qǐng)求類(lèi)方法參數(shù)}catch(Exceptione)log.error("###LogAspectServiceApi.classmethodBefore()###ERROR:",}("===============請(qǐng)求內(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對(duì)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用戶(hù)名passwordvarchar(32)NOTNULLCOMMENT ,加 phonevarchar(20)DEFAULTNULLCOMMENT號(hào) 郵箱createddatetimeNOTNULL,updateddatetimeNOTNULL,PRIMARYKEY(id),UNIQUEKEYusername(username)USINGUNIQUEKEYphone(phone)USINGUNIQUE()USING)ENGINE=InnoDBAUTO_INCREMENT=37DEFAULTCHARSET=utf8COMMENT='用戶(hù)表 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}}提供接口測(cè)試數(shù)據(jù)庫(kù)publicpublicResponseBasefindUser(LonguserId)UserEntityuserEntity=returnsetResultError("為查找到該用戶(hù)信息}return}會(huì)員服務(wù)接新增用戶(hù)接publicpublicResponseBaseregister(@RequestBodyUserEntityuser){StringpassWord=user.getPassword();Stringne IntegerinsertUser=if(insertUser<=0)}return}請(qǐng)求地001:8762/member/register請(qǐng)求參{"":"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}}實(shí)請(qǐng)求地請(qǐng)求參{username:644069password:}返回參{rtnCode:200,msg:success,data:{token:MEMBER_TOKEN9f4190cc-ed49-49ab-ac4b-}}publicpublicResponseBaselogin(@RequestBodyUserEntityuser){Stringusername=user.getUsername();if(StringUtils.isEmpty(username))returnsetResultError("用戶(hù)名稱(chēng)不能為空}Stringpassword=if(StringUtils.isEmpty(password))return 不能為空}String ssWord=UserEntityuserEntity=memberDao.login(username,neif(userEntity==null)returnsetResultError("賬號(hào)或錯(cuò)誤}生成Stringtoken=TokenUtils.getToken();baseRedisService.setString(token,userEntity.getId()+"",null);JSONObjectJSONObject=newJSONObject();JSONObject.put("token",token);return}token請(qǐng)求地請(qǐng)求參token=MEMBER_TOKEN9f4190cc-ed49-49ab-ac4b-返回參{rtnCode:200,msg:success,data:{id:username:644069password:null,phone:null,:yush created:updated:}}publicResponseBasefinT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論