2013-07-11 5 views
2

ColdFusion에서 HTTP 요청 3 스레드를 실행하려고합니다. 이것은 3 가지 캠페인을 선택하고 각각의 수신자를 동시에 보내는 전자 메일 시스템입니다.ColdFusion에서 여러 스레드를 실행하는 방법

그러나 다음 코드는 하나의 스레드 만 실행 한 다음 떨어집니다.

<cfscript> 
     newsLetterCampaignGateway = createObject("component", "legacy.ssl.admin.news.model.newsLetterCampaignGateway"); 
     newsLetterList = newsLetterCampaignGateway.getNewsLettersDueForSend(); 
     //writedump(newsLetterList);abort; 

    </cfscript> 

    <cfloop query="newsLetterList" > 
    <cfset newsLetterId = newsLetterList.newsletterid> 
    <cfset campId = newsLetterList.id> 
    <cfset fromEmail = newsLetterList.fromEmail> 

    <!--- <cfdump var="#campId#"> ---> 
    <cfthread action="run" name="runCampaign#campId#" > 
     <cflock 
      name="runCampaign_#campId#_Lock" 
      type="exclusive" 
      timeout="60"> 
      <!--- <cfdump var="#campId#"> ---> 
      <cfscript>  
       httpService = new http(); 
       httpService.setMethod("get"); 
       httpService.setCharset("utf-8"); 
       httpService.setUrl("http://mysamplesite.com/legacy/ssl/admin/news/model/newsLettercampaign.cfc"); 
       httpService.addParam(type="url",name="method",value="sendCampaignNewsLetters"); 
       httpService.addParam(type="url",name="live",value="true"); 
       httpService.addParam(type="url",name="campaignId",value="#campId#"); 
       httpService.addParam(type="url",name="newsLetterId",value="#newsLetterId#"); 
       httpService.addParam(type="url",name="fromEmail",value="#fromemail#"); 
       httpService.send(); 
      </cfscript> 
     </cflock> 
    </cfthread> 

    </cfloop> 


    <cfloop query="newsLetterList" > 

      <cfthread 
      action="join" 
      name="runCampaign#campId#" 
      /> 
    </cfloop> 

아무 생각 없나요?

+0

어떻게 하나의 스레드 만 실행한다고 판단합니까? –

+1

잘못되었지만 'join'코드가 보입니다. 모든 작업이 끝날 때까지 기다리려면, 각각의 스레드에 대해'join '을 호출하는 대신 스레드 목록을 전달해야한다고 생각합니다. – Leigh

+0

@Leigh, 틀리지 않아. 또한 cfthread action = run 태그 하나만 볼 수 있으며 루프 안에 있지 않습니다. –

답변

0

글쎄, cfhttp를 사용하지 않기로 결정하고 이와 같이 스레딩을 사용했습니다.

<cfsetting requesttimeout="300000"> 
<cfscript> 
    newsLetterCampaignGateway = createObject("component", "path.to.cfc"); 
    newsLetterList = newsLetterCampaignGateway.getNewsLettersDueForSend(); 
</cfscript> 


    <cfloop query="newsLetterList" > 

    <cftry> 
     <cfthread action="run" name="runCampaign#url.campaignId#" > 
      <cfset sendRequest(url)> 
     </cfthread> 

    <cfcatch> 
     <cfdump var="#cfcatch#"><cfabort> 
    </cfcatch> 
    </cftry> 

    </cfloop> 

<cffunction name="sendRequest"> 
    <cfargument name="urlStu" required="true"> 

    <cfset newsLettercampaign = createObject("component", "path.to.cfc")> 
    <cfset newsLettercampaign.sendCampaignNewsLetters(arguments.urlStu)> 

</cffunction>