Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JMS-ʹÓÃÏûÏ¢¶ÓÁÐÓÅ»¯ÍøÕ¾ÐÔÄÜ
 
×÷ÕߣºxpbugµÄ²©¿Í À´Ô´£º¿ªÔ´Öйú ·¢²¼ÓÚ 2015-03-04
  4009  次浏览      27
 

ÔÚµ±½ñ»¥ÁªÍøºÍµçÉÌÊ¢ÐеÄÇé¿öÏ£¬ÍøÕ¾µÄÐÔÄÜÊܵ½Á˼«´óµØÌôÕ½¡£´óÊý¾Ý£¬¸ß²¢·¢³ÉΪ´óÐÍÍøÕ¾µÄ±êÖ¾¡£ÎÞÂÛÌÔ±¦µÄË«11ÓŻݣ¬»¹ÊÇСÃ×ÇÀ¹º£¬ËüÃǶ¼ÓÐÒ»¸ö¹²Í¬µÄÌØµã£¬ÄǾÍÊÇÔÚ¶Ìʱ¼äÄÚ£¬Í»È»Ó¿È볬³öƽʱÊý±¶µÄÓû§¡£

Èç¹ûÿ¸öÓû§´ÓÇëÇ󣬵½¶©µ¥´¦Àí£¬ÔÙµ½ÏìÓ¦·µ»Ø¾ùÔÚÒ»¸öÇëÇóÖÐͬ²½´¦ÀíµÄ»°£¬Óû§µÄÏìӦʱ¼ä½«»áËæ×Ų¢·¢Á¿µÄÌá¸ßÔ½À´Ô½¾Ã£¬Ö±µ½×îºó·þÎñÆ÷±ÀÀ£¡£ÔÚÕâÖÖÇé¿öÏ£¬¿ÉÒÔʹÓÃJMSÏûÏ¢¶ÓÁУ¬Òì²½´¦Àí¶©µ¥¡£Óû§·¢³öÇëÇ󣬷þÎñÆ÷½ÓÊÕÇëÇóÒÔºó£¬ÏòÏûÏ¢¶ÓÁÐÖз¢ËÍÒ»¸öÏûÏ¢£¬¾ÍÁ¢¿Ì·µ»Ø¡°¶©µ¥Õý´¦Àí¡±µÄÏûÏ¢¸øÓû§¡£¶ø¶©µ¥´¦Àí·þÎñÆ÷¿ÉÒÔ²»Í£µÄ´ÓÏûÏ¢¶ÓÁÐÖÐÈ¡³öÏûÏ¢£¬°´ÕÕ×Ô¼ºµÄ½Ú×à½øÐд¦Àí¡£Õâ¾ÍÏñÉú²úÕß-Ïû·ÑÕßģʽһÑù¡£Í¨¹ýÕâÖÖÒì²½µÄ´¦Àí·½Ê½£¬Óû§ÏìӦʱ¼äµÃµ½Ëõ¼õ£¬·þÎñÆ÷µÄѹÁ¦Ò²¿ÉÒÔ±»Ê±¼ä·Öµ££¬´Ó¶ø±Ü¹ýºé·åÆÚ¡£

ÔÚ֮ǰµÄÎÄÕ JavaMail·¢ËÍgoogle email ÖУ¬ÎÒʹÓõÄÊÇͬ²½·½Ê½·¢ËÍemail£¬¿ÉÒÔÒ»¸öÓû§µÄÏìÓ¦ÓжàÂý¡£½ñÌìÎÒ½«Ê¹ÓÃJMSµÄ·½Ê½£¬¸Ä½øÓʼþ·¢ËÍϵͳ¡£

JMS

Ê×ÏÈ»¹ÊÇÒª¼òµ¥µÄ½éÉÜÏÂJMS£¨Java Messaging Service£©¡£Ì«»ù´¡µÄ¾Í²»ÔÙßëß¶ÁË£¬ÕâÀïÖ»ÁгöJMSµÄÁ½ÖÖÏûϢģʽ£º

PTPģʽ

PTPģʽÖУ¬ÏûÏ¢ÊÇQueueµÄÐÎʽ´ÓÒ»¶Ëµ½ÁíÒ»¶Ë¡£ÎÞÂÛclient2ÊÇ·ñÁ¬½Ó£¬ÔËÐÐÖУ¬ JMSµÄ¿É¿¿ÐÔʹµÃ Msg¶¼²»»á¶ªÊ§¡£µ±client2»Ö¸´ÔËÐÐʱ£¬Queue»á¼ÌÐø´«Êä¡£QueueµÄÁ½¶Ë¿ÉÒÔÓжà¸öclients£¬µ«ÊÇÿһ¸öÏûÏ¢£¬Ö»Äܱ»Ò»¸öconsumer clientÏû·Ñ¡£ËùÒÔ£¬¶ÔÓÚÏû·Ñ¿Í»§¶ËÃǶøÑÔ£¬Ò²ÊôÓÚÕùÇÀʽÏû·Ñ¡£

Pub/Subģʽ

ÔÚ·¢²¼¶©ÔĵÄģʽÖУ¬ÔòÊÇÒÔtopic£¬subscription£¬clientµÄ·½Ê½¡£ËùÓеĶ©ÔÄÕß¾ù¿ÉÊܵ½ÏûÏ¢£¬Ò»¸öÏûÏ¢»á±»Öظ´µÄ·¢Ë͸ø²»Í¬µÄÏû·ÑÕß¡£

Ò»¸ötopicÏÂÃæ¿ÉÒԹҺܶàµÄsubscription£¬µ«ÊÇÕâЩsubscriptionÖ»ÓÐ4ÖÖÀàÐÍ£¬Õâ4ÖÐÀàÐÍÈçÏÂͼ£º

Subscription£ºÖ»ÄÜÓÐÒ»¸öclient£¬µ±client¶Ï¿ªÁ¬½Ó£¬subscriptionÔò×Ô¶¯Ïú»Ù¡£

Durable Subscription£ºÖ»ÄÜÓÐÒ»¸öclient£¬µ±client¶Ï¿ªÁ¬½Óºó£¬Message»á±»´æÔÚsubscriptionÖУ¬Ò»µ©clientÖØÐÂÁ¬½Ó£¬Ôò¼ÌÐø·¢ËÍÏûÏ¢¡£

Shared Subscription£º¿ÉÒÔÓжà¸öclientͬʱ¹ÒÔÚÒ»¸ösubscriptionÉÏ£¬ÕâÑù¿ÉÒÔÓжà¸öclient²¢ÐеĴ¦Àí´ËSubscriptionϵÄÏûÏ¢¡£¼Çס£¬ÏûÏ¢Ö»Äܱ»ÆäÖÐÒ»¸öclientËùÏû·Ñ£¬²»Äܱ»¶à¸öclientͬʱÏû·Ñ¡£

Shared Durable Subscription£ºÇø±ðÔÚdurableÉÏ£¬¼´client¶ÏÏߣ¬subscription»á¼ÌÐø´æÔÚ¡£

PTPÊʺϵ¥Ò»ÏûÏ¢ÀàÐÍ£¬µ¥Ò»Ïû·ÑÕßÀàÐÍ¡£¶øPub/SubÊʺ϶àÖÖÀàÏûÏ¢£¬ºÍ¶àÖÖÏû·ÑÕßÀàÐÍ¡£

´ËÍ⣬ÏûÏ¢¿ÉÒÔÊǿɳ־û¯µÄ£¬Ò²¿ÉÒÔÊǷdz־û¯µÄ¡£³Ö¾Ã»¯µÄÏûÏ¢½«±»Ð´ÈëÓ²ÅÌ£¬µ±MQ serverÖØÆôºó£¬ÏûÏ¢²»»á¶ªÊ§¡£

ÏûÏ¢µÄÏû·Ñ·½Ê½Ò²´æÔÚÁ½ÖÖģʽ£º

JMS client APIµ÷ÓᣴËÖÖ·½Ê½µÄȱµãÔÚÓÚ£¬ÐèÒª×Ô¼ºÎ¬»¤¶àÏ̡߳£

MDB£¨Message Driven Bean£©¡£Ê¹ÓÃEJBµÄ·½Ê½£¬¿ÉÒÔÓÉEJBÈÝÆ÷°ïæ¹ÜÀí¶àÏ̡߳£ÆäÖÐMDBÊǶàʵÀýµÄ£¬Ã¿¸öÏûÏ¢¹ýÀ´¶¼ÊÇÒ»¸öеÄÏ̡߳£

JMS·þÎñÆ÷

Ò»°ã£¬³ÆÎªMQ server¡£µ±Ç°×î»ðµÄÊÇApache ActiveMQ£¬Ò²ÓÐʹÓÃJBoss MessagingµÄ¡£µ«±¾ÎĽ«Ê¹ÓÃOracleµÄGlassfish Open MQ¡£

Open MQÊÇOracle GlassfishϵÄÒ»¿îMQ server£¬ËüÊǵÚÒ»¸öʵÏÖÁËJMS2.0±ê×¼µÄMQ server¡£Ëü¿ÉÒÔµ¥¶ÀʹÓ㬴¼¯Èº£¬Ò²¿ÉÒÔÄÚǶµ½GlassfishÖÐʹÓá£ÔÚGlassfish4ÖУ¬OpenMQÒѾ­¼¯³ÉÔÚGlassfish4ÖС£Glassfish4¿ÉÒÔʹÓÃÄÚǶµÄOpenMQÀ´Âú×ãСÐÍÍøÕ¾µÄÒì²½ÏûÏ¢´¦Àí£¬Ò²¿ÉÒÔʹÓÃÍⲿµÄOpemMQ¼¯ÈºÀ´Âú×ã´óÐÍÍøÕ¾µÄÒì²½ÏûÏ¢´¦Àí¡£

ÓÐÈË»áºÜ¾À½á£¬ActiveMQ£¬OpenMQµ½µ×ÄÄÒ»¸öºÃ£¿ÆäʵÎÒ¾õµÃÿһ¿îÈí¼þ¶¼Óи÷×ÔµÄÌØµã£¬ËüÃǾùÄÜÖ§³ÅÆðÒ»¸ö´óÐÍÍøÕ¾µÄ¼Ü¹¹£¬ÎÊÌâÔÚÓÚÄãÈçºÎʹÓÃËüÃÇ¡£GlassfishÊÇÒ»¸öËõСÐ͵ÄWebLogic£¬ÇáÇÉÒ×Óá£OpenMQÖ§³ÖJMS2.0£¬Ò×¼¯³ÉÓÚGlassfish£¬ÓÖΪOracleÖ§³ÖµÄ¿ªÔ´ÏîÄ¿£¬ÆäÄÜÁ¦Ò»ÑùÇ¿º·¡£Î¨Ò»µÄȱµãÊÇ£¬¼¯³ÉÓÚGlassfishÖеÄOpenMQ²»Ö§³ÖC¿Í»§¶Ë¡£

½ÓÏÂÀ´£¬ÎÒ½«Ê¹ÓÃJMSÏûÏ¢¶ÓÁÐÀ´ÓÅ»¯Óʼþ·¢ËÍϵͳ¡£

СÐÍÍøÕ¾µÄÓʼþ·¢ËÍϵͳ

±Ø±¸Èí¼þ

Glassfish4£¬°æ±¾4ÊDZØÐëµÄ£¬ÒòΪ4Öм¯³ÉÁËOpenMQ£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚGlassfish4ÖÐʹÓñ¾µØJMS·þÎñ¡£Õë¶Ô´óÐÍÍøÕ¾µÄÔ¶³ÌJMS·þÎñ£¬ÎÒÃǽ«ÔÚÏÂһƪÎÄÕÂÖÐʵÏÖ¡£

¸ÄÔì·½°¸

±¾ÎĽ«³¢ÊÔÁ½ÖÖ¸ÄÔì·½°¸£º

JMS client API + threadPool£¬×Ô¼ºÔÚºǫ́Æô¶¯Ï̼߳àÌý£¬²¢¹ÜÀí¶àÏ̡߳£

MDB£¬ EJBÈÝÆ÷½øÐÐMessage¼àÌý£¬²¢°ïÖú¹ÜÀí¶àÏ̡߳£

Ó¦¸ÃʹÓöàÉÙỊ̈߳¿ Ï̵߳ÄÊýÁ¿ÓëCPUµÄÊýÁ¿ºÍIO×èÈûʱ¼äÓйØÏµ¡£Èç¹ûÏß³ÌûÓÐÈκÎIO×èÈû£¬ÄÇô£¬Ïß³ÌÊýÁ¿Ó¦¸ÃºÍCPUÊýÁ¿Ïàͬ¡£ÒòΪ¶àÓàµÄÏß³ÌÐèÒªµÈ´ýCPU¡£Èç¹û´æÔÚIO×èÈû£¬ÔòÐèÒª¶àÓàCPUÊýÁ¿µÄỊ̈߳¬Ò»¸öÏß³Ì×èÈûÔÚIOÉϵÄʱºò£¬CPU²»ÖÁÓÚ¿ÕÏУ¬¿ÉÒÔÈ¥Ö´ÐÐÆäËüÏ̡߳£×ÐÏ¸ÍÆµ¼£¬¿ÉÒÔÄÜͨ¹ýIO×èÈûʱ¼ä¸úÔËÐÐʱ¼äµÄ±ÈÀý£¬¿ÉÒÔ¼ÆËã³öËùÐèÏ̵߳ÄÊýÁ¿ ¡£

ÏÔÈ»£¬·½°¸¶þÊÇ×îÃ÷ÖǵÄ×ö·¨¡£¼ÒÏÂÀ´£¬¿ªÊ¼ÊµÏÖ·½°¸¶þ¡£

ÅäÖÃJMS Resources

´ò¿ªGlassfish¹ÜÀíÒ³Ãæ http://localhost:4848

ÅäÖÃJMS ConnectionFactory¡£¿ÉÒÔʹÓÃglassfishĬÈϵġ£

ÅäÖÃDestination Resources. Õ¹¿ªResources->JMS Resources->Destination Resources. ´´½¨Ò»¸öQueue resource¡£

ÅäÖÃJava Mail Session

ÇëÔÚÉÏһƪÎÄÕÂÖÐ http://my.oschina.net/xpbug/blog/263974#OSC_h2_3 ÕÒµ½GmailµÄÅäÖ÷½·¨¡£

´´½¨Ò»¸öWebÏîÄ¿

´´½¨Ò»¸öÃûΪsampleµÄwebÏîÄ¿¡£

´´½¨MDB

´´½¨½ÓÊÕJMSÏûÏ¢µÄMDB£¬ÎÒÃÇʹÓüòµ¥µÄtext message¡£emailµØÖ·ÔÚmessageÌåÖС£MDB»áÏòµØÖ·Öз¢ËÍÒ»¸ö¼òµ¥Óʼþ¡£

package com.mycompany;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 *
 * @author none2
 */
@MessageDriven(activationConfig = {
  @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "jms/myQueue"),
  @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class EmailMessageBean implements MessageListener {
  private final Session mySession;
  
  public EmailMessageBean() throws NamingException {
    Context initCtx = new InitialContext();
    mySession = (Session) initCtx.lookup("mail/mySession");
  }
  
  @Override
  public void onMessage(Message message) {	
    try {
      String address = message.getBody(String.class);
      javax.mail.Message mail = new MimeMessage(mySession);
      mail.setFrom(new InternetAddress("joey.zhangpeng@gmail.com"));
      Address toAddress = new InternetAddress(address);
      mail.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);
      mail.setSubject("Hello");
      mail.setText("A notification.");
      Transport.send(mail);
    } catch (MessagingException | JMSException ex) {
      Logger.getLogger(EmailMessageBean.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

index.html

´´½¨ÍøÕ¾µÄĬÈÏÒ³Ãæ

<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form method="post" action="/sample/NotifyServlet">
Email:<input name="email" value=""/>
<input type="submit" value="Buy" name="submit"/>
</form>
</body>
</html>

´´½¨NotifyServlet

ÔÚservletÖУ¬Ê¹ÓÃjms client£¬·¢ËÍjmsÏûÏ¢µ½queueÖС£

package com.mycompany;

import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.jms.ConnectionFactory;
import javax.jms.JMSContext;
import javax.jms.Queue;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*
* @author none2
*/
@WebServlet(name = "NotifyServlet", urlPatterns = {"/NotifyServlet"})
public class NotifyServlet extends HttpServlet {
@Resource(lookup = "java:comp/DefaultJMSConnectionFactory")
private ConnectionFactory connectionFactory;

@Resource(lookup = "jms/myQueue")
private Queue queue;

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String email = request.getParameter("email");
try (JMSContext context = connectionFactory.createContext();) {
context.createProducer().send(queue, email);
}
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NotifyServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>You have send a notification to " + email + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
}

×îºó£¬½øÐÐÏîÄ¿´ò°ü²¢²¿Êð¡£·ÃÎÊ http://localhost:8080/sample/ À´²âÊÔһϡ£

   
4009 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ