继往开来 吐故纳新
日历
网志分类
· 所有网志 (1031)
· 个人作品 (64)
· 软件设计 (33)
· 面向对象编程 (22)
· JavaAPI (44)
· Java开源工具 (36)
· Swing (34)
· Java语法细节 (39)
· 样式表CSS (12)
· XML (9)
· J2EE(JavaEE) (25)
· 算法数据结构 (64)
· 正则表达式 (4)
· 软件知识 (6)
· Java线程 (9)
· Web开发.Jsp/Servlet/Struts (20)
· 程序随想录 (7)
· Hibernate (7)
· Spring (5)
· J2SE 高级 (2)
· J2SE 高级 (0)
· Web开发.Ajax (15)
· Web开发.JavaScript (48)
· DB4O (2)
· Web开发.CSS/Html (22)
· C# (20)
· ERP (4)
· JDBC (1)
· 编程资源 (16)
· 编程感悟 (29)
· DB/Sql (13)
· VB (29)
· VC (2)
· 桌面脚本 (3)
· 新兴软件 (3)
· 英语学习 (21)
· 网文转载 (164)
· 职场风云 (40)
· 诗词歌赋 (32)
· 生活感言 (79)
· 生活常识 (2)
· 奇文共赏 (14)
· 财经纵横 (11)
· 未分类 (19)
最新的评论
· 05/02 不错,欢迎进入...
· 04/12 http://...
· 04/12 http://...
· 04/12 http://...
· 04/12 http://...
· 04/12 http://...
站内搜索
友情链接
· 歪酷博客
· 我的歪酷
· 偶要雷锋
· 豆瓣
· nczonline
· 当当网
· easyjf中文站
· Donews
· 天极Java文章列表
· W3CSchool
· taiten的BLOG
· Dojo中国
· Dojo
· Extjs.com
· Lifehack中文网志
· JaveEye的一个AS专题
· Banq's JDon
· Java 中文网址大全
· 梦想Java
· 360Doc个人图书馆
· java开源大全
· 我在硅谷动力的软件下载站
· 站长中国
· 随意贴
· CSS教学素材站
· java 参考中文站
· 面向构件与SOA社区
· 彩字生成
· 派派小说论坛
· 如坐春风
· 英语学习网
· BBC CHina
· www.dlbang.com
· 古文竖排格式在线转化工具
· 免费家谱
· 图片上传基地
· 风景壁纸
· 和风细雨
· MyC#BlogInCsdn

订阅 RSS

0419030

歪酷博客

开此博一为经验积累,二为资料收集,三为同道交流,四为资源共享.
佚名 @ 2009-10-26 21:48

转载地址:
http://shenzhenchufa.blog.51cto.com/730213/171710

[1]
在介绍ActiveMQ之前,首先简要介绍一下JMS规范。
JMS的简介:
(1)
JMS(Java Message Service,Java消息服务)是一组Java应用程序接口(Java API),它提供创建、发送、接收、读取消息的服务。JMS 使您能够通过消息收发服务从一个 JMS 客户机向另一个 JML 客户机交流消息。

JMS是一种与厂商无关的 API,用来访问消息收发系统。它类似于 JDBC (Java Database Connectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ.

(2)
JMS典型的应用场景:
操作可异步执行.
发email了,   发msn消息了. 
或者一些比较耗时的操作,   比如要在某目录下生成一个大报表.   操作者把指令发出去就完事.
 
[2]
JMS的基本构件:
(1)
Broker
什么是Broker呢?可以把JMS Brokers 看成是服务器端。这个服务器可以独立运行.也可以随着其他容器
以内嵌方式云心,如下配置:
使用显示的Java代码创建
BrokerService broker = new BrokerService();
// configure the broker
broker.addConnector("tcp://localhost:61616");
broker.start();
使用BrokerFacotry创建
BrokerService broker = BrokerFactory.getInstance().createBroker(someURI);
使用Spring Bean创建
<bean id=”broker” class=”org.apache.activemq.xbean.BrokerFactoryBean”>
    <property name=”config” value=”classpath:org/apache/activemq/xbean/activemq.xml” />
    <property name=”start” value=”true” />
</bean>
还可以使用XBean或Spring 2.0等多种配置方式配置,
通过ActiveMQConnectionFactory还可以隐含的创建内嵌的broker,这个broker就不是一个独立的服务了。
<bean id=”jmsTemplate” class=”org.springframework.jms.core.JmsTemplate”>
    <property name=”connectionFactory” ref=”jmsFactory”/>
    <property name=”defaultDestination” ref=”destination” />
    <property name=”destinationResolver” ref=”默认是DynamicDestionResolver” />
    <property name=”pubSubDomain”><value>true or false默认是false,
       false是QueneDestination, true是TopicDestination</value>
</bean>
上面的defaultDestination是指默认发送和接收的目的地,我们也可以不指定,而是通过目的地名称让jmsTemplate自动帮我们创建.

(2)
1 连接工厂
连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。
2 连接
JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。
3 会话
JMS Session是生产和消费消息的一个单线程上下文。会话用于创建消息生产者(producer)、消息消费者(consumer)和消息(message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。
(3)
目的地:
目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。JMS1.0.2规范中定义了两种
消息传递域:Point-to-Point消息(P2P),点对点;发布订阅消息(Publish Subscribe messaging,简称Pub/Sub)
两者的区别:
P2P消息模型是在点对点之间传递消息时使用。如果应用程序开发者希望每一条消息都能够被处理,那么应该使用P2P消息模型。与Pub/Sub消息模型不同,P2P消息总是能够被传送到指定的位置。
        P2P消息,每个消息只能有一个消费者。
  Pub/Sub模型在一到多的消息广播时使用。如果一定程度的消息传递的不可靠性可以被接受的话,那么应用程序开发者也可以使用Pub/Sub消息模型。换句话说,它适用于所有的消息消费程序并不要求能够收到所有的信息或者消息消费程序并不想接收到任何消息的情况。
    Pub/Sub,每个消息可以有多个消费者。
在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。
(3)
3.1
消息生产者
消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。
3.2
消息消费者
消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。消息的消费可以采用以下两种
方法之一:
? 异步消费。客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。(异步操作)
? 同步消费。通过调用消费者的receive方法从目的地中显式提取消息。receive方法可以一直阻塞到消息到达。
3.3
消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:
简单文本 (TextMessage)、可序列化的对象 (ObjectMessage)、属性集合
(MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。
(4)
JMS定义了从0到9的优先级路线级别,0是最低的优先级而9则是最高的。更特殊的是0到4是正常优先级的变化幅度,而5到9是加快的优先级的变化幅度。

[3]
ActiveMQ简介:
ActiveMQ 是开源的JMS实现,Geronimo应用服务器就是使用的ActiveMQ提供JMS服务。
安装
http://activemq.apache.org/download.html 下载5.0.0发行包,解压即可,
启动
window环境运行解压目录下的/bin/activemq.bat
测试
ActiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试ActiveMQ是否成功启动
window环境运行  netstat -an|find "61616"
监控
ActiveMQ5.0版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用。
admin:http://127.0.0.1:8161/admin/
demo:http://127.0.0.1:8161/demo/
点击demo应用中的“ Market data publisher ”,就会发一些测试的消息。转到admin页面的topics menu下面(queue和topic的区别见 http://andyao.javaeye.com/blog/153173 ),可以看到消息在增长。
ActiveMQ5.0的配置文件在解压目录下的/conf目录下面。主要配置文件为activemq.xml.
 
[4]
实例一:(没有结合spring框架)
public class QueueProducer {
/*
 * 创建的简图
 ConnectionFactory---->Connection--->Session--->Message
 Destination + Session------------------------------------>Producer
 Destination + Session------------------------------------>MessageConsumer
*/ 
 public static void main(String[] args) {
  // ConnectionFactory :连接工厂,JMS 用它创建连接
  ConnectionFactory connectionFactory;
  // Connection :JMS 客户端到JMS Provider 的连接
  Connection connection = null;
  // Session: 一个发送或接收消息的线程
  Session session;
  // Destination :消息的目的地;消息发送给谁.
  Queue queue;
  //设置回复的目的地
  Queue replyQueue;
  // MessageProducer:消息发送者
  MessageProducer producer;
  MessageConsumer replyer;
  connectionFactory = new ActiveMQConnectionFactory(
    ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD,
    "tcp://192.168.1.191:61616");
  try {
   // 构造从工厂得到连接对象
   connection = connectionFactory.createConnection();
   // 启动
   connection.start();
   // 获取操作连接
   session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);
   // 创建队列: 可以在http://localhost:8161/admin/queue.jsp中看到
   queue=new ActiveMQQueue("jason.queue2");
   replyQueue=new ActiveMQQueue("jason.replyQueue");
   // 得到消息生成者【发送者】:需要由Session和Destination来创建
   producer = session.createProducer(queue);
   // 创建消息
   TextMessage message = session.createTextMessage("jason学习ActiveMq 发送的消息");
   //在消息中设置回复的目的地,
   //对方用MessageProducer sender=session.createProducer(message.getJMSReplyTo());创建回复者
   message.setJMSReplyTo(replyQueue);

   // 发送一个non-Persistent的消息
   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
   producer.send(message);
            // 发送一个Persistent的消息
   producer.setDeliveryMode(DeliveryMode.PERSISTENT);
   producer.send(session.createTextMessage("这是一个Persistent的消息!重启JMS,仍可获取"));

   System.out.println("发送消息:jason学习ActiveMq 发送的消息");
   System.out.println("这是一个Persistent的消息!重启JMS,仍可获取");
   
   //用回复的目的地定义回复接收者,且设置侦听
   replyer=session.createConsumer(replyQueue);
   replyer.setMessageListener
   (
    new MessageListener()
    {
     public void onMessage(Message message)
     {
      try {
       TextMessage txtmess = (TextMessage) message;
          System.out.println("consumer的回复内容是: "+txtmess.getText());
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
    } 
   );
   session.commit();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (null != connection)
     connection.close();
   } catch (Throwable ignore) {
   }
  }
 }
}
接收者:
//public class Receiver {
public class QueueConsumer implements MessageListener{
  public static void main(String[] args)    
  {
    QueueConsumer re=new QueueConsumer();
    //循环只是为了让程序每2秒进行一次连接侦听是否有消息可以获取.
    while(true)    
    {
      re.consumeMessage();
      try {
        Thread.sleep(2000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    //对于主动接收的,只须直接执行:re.consumeMessage();即可.
    
//其中的while(true),会一次性将所有的消息获取过来.
  }
    
  public void consumeMessage()
  {
    ConnectionFactory connectionFactory;
    Connection connection = null;
    Session session;
    Queue queue;
    MessageConsumer consumer;

    connectionFactory = new ActiveMQConnectionFactory(
        ActiveMQConnection.DEFAULT_USER,
        ActiveMQConnection.DEFAULT_PASSWORD,
        "tcp://192.168.1.191:61616");
    try {
      connection = connectionFactory.createConnection();
      connection.start();
      session = connection.createSession(Boolean.FALSE,
          Session.AUTO_ACKNOWLEDGE);
      queue=new ActiveMQQueue("jason.queue2");
      consumer = session.createConsumer(queue);
        
      // 接受消息方式一:主动的去接受消息,用consumer.receive
      //只能获取一条消息 -->不采用
//      TextMessage message = (TextMessage) consumer.receive(1000);
//      if (null != message) {
//        System.out.println("收到消息" + message.getText());
//      }    
      //可以不断循环,获取所有的消息.--->关键.
//      while (true) {
//        TextMessage message = (TextMessage) consumer.receive(1000);
//        if (null != message) {
//          System.out.println("收到消息" + message.getText());
//        } else {
//          break;    //没有消息时,退出
//        }
//      }
        
      /*接受消息方式二:基于消息监听的机制,需要实现MessageListener接口,这个接口有个onMessage方法,当接受到消息的时候会自动调用这个函数对消息进行处理。
      */

      consumer.setMessageListener(this);
        

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (null != connection)
          connection.close();
      } catch (Throwable ignore) {
      }
    }    
  }
    
  public void onMessage(Message message)
  {
    try {
      if (message instanceof TextMessage) {
        TextMessage txtmess = (TextMessage) message;
        System.out.println("收到的消息是:" + txtmess.getText()); 
      //回复发送者
        MessageProducer sender=session.createProducer(message.getJMSReplyTo());
    sender.send(session.createTextMessage("已收到你的消息"));

      }
      else
        System.out.println("收到的消息是:" + message);
    } catch (Exception e) {
    }    
  }
}
说明:
(2)
VM Transport
VM transport允许在VM内部通信,从而避免了网络传输的开销。这时候采用的连接不是socket连接,而是直接地方法调用。第一个创建VM 连接的客户会启动一个embed VM broker,接下来所有使用相同的broker name的VM连接都会使用这个broker。当这个broker上所有的连接都关闭的时候,这个broker也会自动关闭。
TCP Transport
TCP transport 允许客户端通过TCP socket连接到远程的broker。以下是配置语法:
tcp://hostname:port?transportOptions
tcp://localhost:61616
(3)
3.1
启动activeMQ后,用户创建的queues会被保存在activeMQ解压目录下的\data\kr-store\data中.
3.2
创建queue,可以在代码中创建,也可以直接进入http://localhost:8161/admin--->点击queue--->在上面的field中填下你要创建的queue名-->点击创建即可.
3.3
若用户创建的queue,不是持久化的,则在重启activeMQ后,数据文件中的内容会被清空,但文件仍存在.
(4)
messageProducer发送消息后,会在保存在目的地,即上面的queue中,也即就是在\data\kr-store\data目录下的文件中.
messageReceiver(连接到相同目的地的接收者),不需要立即接收.只要activeMQ的服务端不关闭,当运行接收者,连接到activeMQ的服务端时,就可以获取activeMQ服务端上已发送的消息.

发送/接收的消息情况及数量及消息的内容与处理(删除),可以在
(5)
可以将activeMQ的服务端放于一PC中,发送者位于另一PC,接收者也位于另一PC中.
只要:tcp://activeMQ的服务端IP:activeMQ的服务端口,进行连接即可.
(6)
queue消息,只被消费一次.
 
topic的实例(无结合spring)
public class TopicTest {
    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
        Connection connection = factory.createConnection();
        connection.start();
        //创建一个Topic
        Topic topic= new ActiveMQTopic("testTopic");
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //注册消费者1
        MessageConsumer comsumer1 = session.createConsumer(topic);
        comsumer1.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer1 get " + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        //注册消费者2
        MessageConsumer comsumer2 = session.createConsumer(topic);
        comsumer2.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer2 get " + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        //创建一个生产者,然后发送多个消息。
        MessageProducer producer = session.createProducer(topic);
        for(int i=0; i<10; i++){
            producer.send(session.createTextMessage("Message:" + i));
        }
    }
}
输出如下:
Consumer1 get Message:0
Consumer2 get Message:0
Consumer1 get Message:1
Consumer2 get Message:1
Consumer1 get Message:2
Consumer2 get Message:2
.............................

实例二:
异步的电子邮件(将topic的应用实例也放在一起)

(4.1)
背景说明:  
以传统的方式发送电子邮件(作为同步请求的一部分)会引起一些问题。首先,连接到电子邮件服务器需要一次网络往返,速度可能会很慢,尤其是在服务器非常繁忙的时候。过载的电子邮件服务器甚至可以使依赖于电子邮件的服务暂时不可用。
xa 事务支持
另一个显而易见的问题是,电子邮件服务器通常在本质上是非事务性的。当事务被回滚时,这可以导致出现不一致的通知——把一条消息放入队列之后不能取消它。幸运的是, jms 支持事务,而且可以通过把消息的发送延迟到提交底层事务的时候来解决这个问题。
(4.2)
实现效果:
用户在更改密码后,系统会发送邮件通知用户,为了避免发送邮件时程序对用户操作的阻塞,可以用JMS异步发送邮件.
(4.3)
实现流程:
当用户更改密码后
--1->调用JMS的发送者,发送者会利用jmsTemplate发送消息到目的地
--2->系统,执行原系统的程序.
--2->当消息发送后,messageListener侦听到消息,接收后执行相应的方法handleMessage().在此方法中执行发送email.
好处:
从而实现了异步发送邮件,避免用户等待单一线程完成,使原程序的执行更快,提升用户体验
<1>
第一步:
创建broker,jmsFactory,destination,messageConverter,jmsTemplate(用于发送JMS消息).
然后将jmsFactory,Destination,MessageConverter放入jmsTemplate中.
(1)
首先,我们在Spring中加入ActiveMQ Broker的配置:
1.
删除原来jason-servlet.xml中的
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
2.
<!--  在Spring中配置嵌入式的 activemq broker,这样就不用在使用JMS时,要手动启动activeMQ broker -->
    <amq:broker useJmx="false" persistent="false">
  <amq:transportConnectors>
   <amq:transportConnector uri="tcp://localhost:61616" />
  </amq:transportConnectors>
 </amq:broker>
 <!--  消息的存储机制, 服务器重启也不会丢失消息.
     <amq:broker useJmx="false" persistent="true"> 
         <amq:persistenceAdapter> 
             <amq:amqPersistenceAdapter directory="d:/amq"/> 
         </amq:persistenceAdapter> 
         <amq:transportConnectors> 
             <amq:transportConnector uri="tcp://localhost:61616" /> 
             <amq:transportConnector uri="vm://localhost:0" /> 
         </amq:transportConnectors> 
     </amq:broker> 
 -->
(2)
在Spring中配置JMS Connection Factory。
    <bean id="jmsFactory2"
     class="org.apache.activemq.ActiveMQConnectionFactory">
     <property name="brokerURL" value="tcp://localhost:61616" />
    </bean>
也可直接用:
<amq:connectionFactory id="jmsFactory2" brokerURL="tcp://localhost:61616" />
注意其中的borkerURL,应该是你在activemq.xml中transportconnector节点的uri属性,这表示JMS Server的监听地址。activeMQ默认端口是61616,由于采用默认方式,所以这里也是61616.
同时,要运行程序之前,我们要先启动broker,即启动解压目录下的/bin/activemq.bat.
(3)
配置消息发送目的地:
    <bean id="topicDestination"
        class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="MY.topic" />
    </bean>
    <bean id="queueDestination"
        class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg value="MY.queue" />
    </bean>
也可直接用:
    <amq:topic name="topicDestination" physicalName="MY.topic"/>
    <amq:queue name="queueDestination" physicalName="MY.queue"/>

在 JMS中,目的地有两种:主题(topic)和队列(queue)。两者的区别是:当一个主题目的地中被放入了一个消息后,所有的订阅者都会收到通知;而 对于队列,仅有一个“订阅者”会收到这个消息,队列中的消息一旦被处理,就不会存在于队列中。显然,对于邮件发送程序来说,使用队列才是正确的选择,而使 用主题时,可能会发送多封相同的邮件。
(4)
配置Spring中消息发送的JMS Template:
(与hibernate相似,其配置的是hibernateTemplate.都要将连接工厂放到template中)
    <bean id="producerJmsTemplate"
        class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <bean class="org.springframework.jms.connection.SingleConnectionFactory">
                <property name="targetConnectionFactory"
                    ref="jmsFactory2" />
            </bean>
        </property>
        <!-- 因为要实现此模板同时用于queue与topic,所以目的地要放于发送者中.若单独使用,放于此,更方便!
        <property name="defaultDestination" ref="queueDestination" />
         -->
        <property name="messageConverter" ref="userMessageConverter" />
    </bean>
(5)
在实际的消息发送中,邮件内容需要用到User.username, User.password, User.email, User.fullname,我们定义了messageConverter,在发送信息时,将user对象转换成消息,在接收消息时,会将消息转换成 User对象.只要在上面的jmstemplate中设置了messageConverter属性,发送/接收消息时,Spring会自动帮我们进行转 换,下面是Converter的配置和代码:
<bean id="userMessageConverter"
        class="com.laoer.bbscs.jms.UserMessageConverter" />
代码如下:
public class UserMessageConverter implements MessageConverter {
    private static transient Log logger = LogFactory.getLog(UserMessageConverter.class);
    public Object fromMessage(Message message) throws JMSException {
        if (logger.isDebugEnabled()) {
            logger.debug("Receive JMS message: " + message);
        }
        if (message instanceof ObjectMessage) {
            ObjectMessage oMsg = (ObjectMessage) message;
            if (oMsg instanceof ActiveMQObjectMessage) {
                ActiveMQObjectMessage aMsg = (ActiveMQObjectMessage) oMsg;
                try {
                    PersonInfo personInfo = (PersonInfo) aMsg.getObject();
                    return personInfo;
                } catch (Exception e) {
                    logger.error("Message:[" + message + "] is not a instance of personInfo.");
                    throw new JMSException("Message:[" + message + "] is not a instance of personInfo.");
                }
            } else {
                logger.error("Message:[" + message + "] is not " + "a instance of ActiveMQObjectMessage[personInfo].");
                throw new JMSException("Message:[" + message + "] is not " + "a instance of ActiveMQObjectMessage[personInfo].");
            }
        } else {
            logger.error("Message:[" + message + "] is not a instance of ObjectMessage.");
            throw new JMSException("Message:[" + message + "] is not a instance of ObjectMessage.");
        }
    }
 
    public Message toMessage(Object obj, Session session) throws JMSException {
        if (logger.isDebugEnabled()) {
            logger.debug("Convert User object to JMS message: " + obj);
        }
        if (obj instanceof PersonInfo) {
            ActiveMQObjectMessage msg = (ActiveMQObjectMessage) session.createObjectMessage();
            msg.setObject((PersonInfo) obj);
            return msg;
        } else {
            logger.error("Object:[" + obj + "] is not a instance of PersonInfo.");
            throw new JMSException("Object:[" + obj + "] is not a instance of PersonInfo.");
        }
    }
}
此程序实现了MessageConverter接口,并实现其中的fromMessage和toMessage方法,分别实现转换接收到的消息为User对象和转换User对象到消息。
我们在程序中使用的是ActiveMQObjectMessage,它是ActiveMQ中对javax.jms.ObjectMessage的一个实现。
<2>
第二步:
配置发送消息:

(1)
在spring配置文件中配置发送者:
<!-- 发送queue消息 -->
 <bean id="userMessageProducer" class="com.laoer.bbscs.jms.UserMessageProducer">
  <property name="jmsTemplate" ref="producerJmsTemplate" />
  <property name="defaultDestination" ref="queueDestination" />
 </bean>
 <!-- 发送topic消息 -->
 <bean id="topicMessageProducer" class="com.laoer.bbscs.jms.TopicMessageProducer">
  <property name="jmsTemplate" ref="producerJmsTemplate" />
  <property name="defaultDestination" ref="topicDestination" />
 </bean>
由于发送者是用jmsTemplate进行发送的,所以有注入jmsTemplate.
(2)
代码如下:
package com.laoer.bbscs.jms;
public class UserMessageProducer {
    private JmsTemplate jmsTemplate;
 //因为"目的地"属性放于jmsTemplate中,则不用添加此属性.
 private Queue defaultDestination;
    public void sendUserLoginInformationMail(PersonInfo personInfo) {
//     若"目的地"属性放于jmsTemplate中,则用此方式
//     getJmsTemplate().convertAndSend(personInfo);
        getJmsTemplate().convertAndSend(this.defaultDestination,personInfo);

    }
    getter,setter略...
}
其中,sendUserLoginInformationMail方法是唯一我们需要编写的,调用JMSTemplate的convertAndSend方法,Spring会自己调用我们之前配置的converter来转换我们发送的User对象,再进行发送。
public class TopicMessageProducer {
 private JmsTemplate jmsTemplate;
 private Topic defaultDestination;
    public void sendTopicMessage(PersonInfo personInfo) {
        getJmsTemplate().convertAndSend(this.defaultDestination,personInfo);
    }
    getter,setter略...
}
 
<3>
实现消息的接收

我们使用MDP(Message Drive POJO)来实现消息的异步接收。
我们需要实现javax.jms.MessageListener接口的void onMessage(Message message)方法来接收消息。
不过我们可以使用Spring中提供的MessageListenerAdapter来简化接收消息的代码。
(0)
<!-- 定义消息消费者,然后直接在messageListener中调用.
          消费者,不用加入jmsTemplate属性,jmsTemplate只用于发送消息 -->
    <!-- queue消息消费者,只能一个 -->
 <bean id="userMessageConsumer" class="com.laoer.bbscs.jms.UserMessageConsumer">
      <property name="mailSender" ref="mailSender" />
 </bean>
    <!-- topic消息消费者,可以多个 -->
 <bean id="topicConsumerA" class="com.laoer.bbscs.jms.TopicConsumerA" />
 <bean id="topicConsumerB" class="com.laoer.bbscs.jms.TopicConsumerB" />
(1)
配置messageListener,用它来接收消息.(用jmsTemplate来发送消息)
<!-- 定义queue,topic(A/B consumer)各自的侦听器 -->
    <bean id="messageListener"
        class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <constructor-arg ref="userMessageConsumer"/>
        <property name="defaultListenerMethod" value="handleMessage" />
        <property name="messageConverter" ref="userMessageConverter" />
    </bean>   
    <bean id="topicListenerA"
        class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <constructor-arg ref="topicConsumerA"/>
        <property name="defaultListenerMethod" value="receiveA" />
        <property name="messageConverter" ref="userMessageConverter" />
    </bean>   
    <bean id="topicListenerB"
        class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <constructor-arg ref="topicConsumerB"/>
        <property name="defaultListenerMethod" value="receiveB" />
        <property name="messageConverter" ref="userMessageConverter" />
    </bean> 
其中的mailSender:即是我们的邮件发送类,此类中的方法send()方法实现了邮件发送的功能。
消息侦听适配器defaultListenerMethod属性:指定Spring在收到消息后调用的方法,此处为handleMessage,Spring会根据收到的消息--转换为User对象-->调用handleMessage()方法。
(2)
配置消息侦听容器,并指定我们定义的消息侦听器。
<!-- 定义queue,topic(A/B consumer)各自的侦听容器 -->
<bean id="listenerContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="concurrentConsumers" value="5" />
        <property name="connectionFactory" ref="jmsFactory2" />
        <property name="destination" ref="queueDestination" />
        <property name="messageListener" ref="messageListener" />
    </bean>
    <bean id="topicListenerContainerA"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="concurrentConsumers" value="5" />
        <property name="connectionFactory" ref="jmsFactory2" />
        <property name="destination" ref="topicDestination" />
        <property name="messageListener" ref="topicListenerA" />
    </bean>
    <bean id="topicListenerContainerB"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="concurrentConsumers" value="5" />
        <property name="connectionFactory" ref="jmsFactory2" />
        <property name="destination" ref="topicDestination" />
        <property name="messageListener" ref="topicListenerB" />
    </bean>
配置了同时侦听的个数,连接工厂(发送者,接收者都要连接到同一地方),目的地(与上面对应),自定义的侦听器.
(3)
接收者的代码:
package com.laoer.bbscs.jms;
public class UserMessageConsumer {
    private static transient Log logger = LogFactory.getLog(UserMessageConsumer.class);
    private MailSender mailSender;
    public void handleMessage(PersonInfo personInfo) throws JMSException {
        if (logger.isDebugEnabled()) {
            logger.debug("Receive a User object from ActiveMQ: " + personInfo.toString());
        }
        mailSender.send(personInfo, "h***7@126.com");
    }
getter,setter略....
}
 
public class TopicConsumerA {
 public void receiveA(PersonInfo personInfo) throws JMSException
 {
  System.out.println("TopicConsumerA收到TopicProducer的消息---->personInfo的用户名是:"+personInfo.getName());
 }
}
TopicConsumerB与TopicConsumerA相似.
 
(4)
发送邮件的相应方法:
 public String send(PersonInfo personinfo,String mailAddr)
 {
  System.out.println("现在的时间是: "+System.currentTimeMillis());
  // 不要使用SimpleEmail,会出现乱码问题
  HtmlEmail email = new HtmlEmail();
  try{
   // 这里是发送服务器的名字
   email.setHostName("smtp.sohu.com");
   // 编码集的设置
   email.setCharset("gbk");
   // 收件人的邮箱
//   email.addTo("h***7@126.com");
   email.addTo(mailAddr);
   // 发送人的邮箱
   email.setFrom("sh****ufa@sohu.com", "she**fa");
   // 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件
服务器上的注册名称和密码
   email.setAuthentication("she**fa","20***23");
   email.setSubject("测试email与JMS--你的密码修改了");
   // 要发送的信息
   email.setMsg("你现在的用户名是:"+personinfo.getName()+" \n密码
是:"+personinfo.getPassword());
   // 发送
   email.send();
   System.out.println("现在的时间是: "+System.currentTimeMillis());
   return "发送成功!";
  } catch (EmailException e) {
   return "发送失败!";
  }
 }
(5)
在jLogin.java中调用即可(也添加相应的producer及setter,getter):
//用ActiveMQ的queue,正常发email
   this.getMailSender().send(pi, hw***@126.com");
   this.getUserMessageProducer().sendUserLoginInformationMail(pi);
   //用ActiveMQ的topic发布消息
   this.getTopicMessageProducer().sendTopicMessage(pi);
 
这样,当执行后,会异步发送邮件,同时topicProducer发送一个消息后,topicConsumerA/B都会侦听接收到,且执行相应的操作.
[6]
实例二:
整合ActiveMQ,Quartz,实现定时发送邮件:

(1)
activeMQ的配置同上;
(2)
如何将ActiveMQ整合到Quartz中去:
1.用非继承的方法实现quartz有任务类.
将任务类的目标类,目标方法:指定为消息发送类,及其发送消息的方法即可.
   <!-- 利用Quartz定时分email -->
   <bean id="mailJobDetailBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject">
          <ref local="userMessageProducer"/>  -->指定发送者
       </property>
       <property name="targetMethod">         -->指定发送方法,不同于上面
          <value>send2</value>
       </property>
   </bean>
    public void send2()
    {
     PersonInfo personInfo=new PersonInfo();
     personInfo.setName("jason");
     personInfo.setPassword("123456789");
     this.getJmsTemplate().convertAndSend(this.defaultDestination,personInfo);
    }
2.创建时间表.
   <bean d="mailCronTriggerBean"
class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail">
          <ref local="mailJobDetailBean"/>
       </property>
       <property name="cronExpression">
          <value>30 * * * * ?</value>
       </property>
   </bean>
3.放入任务工厂.
   <bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <property name="triggers">
        <list>
           <ref bean="cronTriggerBean"/>
           <ref bean="jasonGetPersonCronTriggerBean"/>
           <ref bean="mailCronTriggerBean"/>
        </list>
       </property>
   </bean>



 
佚名 @ 2009-10-05 08:36

震荡市做t+0的技巧(主力不传之密)本部分设定了隐藏,您已回复过了,以下是隐藏的内容在大盘震荡时基金 。主力资金都在做t+0 。一般有时间段 方法是主力不可能传受的 现在我奉献出来 希望验 证                                                                                                      T+0
第一部分
“T+0”操作技巧根据操作的方向,可以分为顺向的“T+0”操作和逆向的“T+0”操作两种;根据获利还是被套时期实施“T+0”操作的可以分为解套型“T+0”操作和追加利润型“T+0”操作。
一、顺向“T+0”操作的具体操作方法
1、当投资者持有一定数量被套股票后,某天该股严重超跌或低开,可以乘这个机会,买入同等数量同一股票,待其涨升到一定高度之后,将原来被套的同一品种的股票全部卖出,从而在一个交易日内实现低买高卖,来获取差价利润。
2、当投资者持有一定数量被套股票后,即使没有严重超跌或低开,可以当该股在盘中表现出现明显上升趋势时,可以乘这个机会,买入同等数量同一股票,待其涨升到一定高度之后,将原来被套的同一品种的股票全部卖出,从而在一个交易日内实现平买高卖,来获取差价利润。
3、当投资者持有的股票没有被套牢,而是已经盈利的获利盘时,如果投资者认为该股仍有空间,可以使用“T+0”操作。这样可以在大幅涨升的当天通过购买双倍筹码来获取双倍的收益,争取利润的最大化。

二、逆向“T+0”操作的具体操作方法
逆向“T+0”操作技巧与顺向“T+0”操作技巧极为相似,都是利用手中的原有筹码实现盘中交易,两者唯一的区别在于:顺向“T+0”操作是先买后卖, 逆向“T+0”操作是先卖后买。顺向“T+0”操作需要投资者手中必须持有部分现金,如果投资者满仓被套,则无法实施交易;而逆向“T+0”操作则不需要 投资者持有现金,即使投资者满仓被套也可以实施交易。具体操作方法如下:
1、当投资者持有一定数量被套股票后,某天该股受突发利好消息刺激,股价大幅高开或急速上冲,可以乘这个机会,先将手中被套的筹码卖出,待股价结束快速上涨并出现回落之后,将原来抛出的同一品种股票全部买进,从而在一个交易日内实现高卖低买,来获取差价利润。

2、当投资者持有一定数量被套股票后,如果该股没有出现因为利好而高开的走势,但当该股在盘中表现出明显下跌趋势时,可以乘这个机会,先将手中被套的筹 码卖出,然后在较低的价位买入同等数量的同一股票,从而在一个交易日内实现平卖低买,来获取差价利润。这种方法只适合于盘中短期仍有下跌趋势的个股。对于 下跌空间较大,长期下跌趋势明显的个股,仍然以止损操作为主。
3、当投资者持有的股票没有被套牢,而是已经盈利的获利盘时,如果股价在行情中上冲过快,也会导致出现正常回落走势。投资者可以乘其上冲过急时,先卖出获利筹码,等待股价出现恢复性下跌时在买回。通过盘中“T+0”操作,争取利润的最大化。

第二部分
一、建立主仓:前提是弱市行情下的震荡走势,大盘股指大起大落,个股振幅很高。
1、 如何选择个股进仓:不管在牛市还是熊市,最好选择比较活跃的股票,通俗一点,就是喜欢上串下跳的,振幅大于3%,量比大于1的,换手率大于3%的,在K线 形态上呈现上下影线较长的,历史上喜欢连续涨停的,多庄控制的中小盘个股首选,也就是我经常提到的,历史上比较凶悍的股票。进仓时要留有余地,也就是说, 不要轻信书本上讲的,全仓进出。牛市行情中,可以灌注在一只个股上,但在弱市行情下,还是一筐鸡蛋要分成三只篮子装才安全。万一跌了一只篮子,还有两只。 就拿600346大橡树来说吧。这只个股从底部拉到顶峰,有过4次的涨停板。从K线形态上,经常出现较长的上下影线烛体(红蓝烛体都行)。例如,我在08 年4月18日进仓这只个股,进价9元,2000股,开始进行下面操作。
2、如何操作:目前市场实行T+1的交易规则,即当日买进的股票,必须要到 下一个交易日才能卖出。我们完全可以打“擦边球”,灵活应用交易规则。你已经在18日进仓2000股了,19日上午大盘高开,个股反弹时,只要扣除税费有 利可图,我出半仓1000股。那么手中还有1000股。下午开盘冲高回落,我在2点时再进仓1000股,收盘前,股指再次拉高,我再出1000股。为什么 可以这样做呢?因为交易电脑默认,你是在卖昨天的1000股,而不是今天进仓的1000股。当天卖的个股,可以当天再买,而不能当天买的,当天卖。如果预 测今天的振幅很大,可以用几百股来进行更多次的交易。这样实现了快速在底部买入成交,并在高位及时卖出套现。所以要选择时机,不是每天都可以做的,做得不 好,也有再度被套或踏空买不回来 。所以还要结合一些别的战略战术来综合运用。例如善于参照大盘和个股的分时成交均线以及盘口技术,加以反复操作,直到将个股送到强势上升阶段后,T+0操 作阶段也就完成了。有人问我,你如何知道当天股指要拉升到几个点?只要你掌握一个原则,现在税费低,一天中不只是一次的操作,活跃的个股,一天可以做好几 次,只要你认为这个是一个高点或低点就大胆操作,即使下一个比这次更高或更低,也不要紧。掌握一个原则:涨停和跌停都是10%,在自己没有把握时,分成3 批进出仓,有比进仓那个点的进出差价在正负3%、正负6%、正负9%以上就可以了。扣除税费后,有利可图就可以。


3、利用T+0 解套股票:通常有人买入股票后,跌了就认为被套了,马上进行割肉,这是最愚蠢的。如果你是作为长线股的投资,跌了也许并不会卖出,或许还会补仓。原因很简 单,都是没有冷静分析,只是看到了表面的涨与跌。所以建议在弱市行情下,进行T+0的操作,以此来降低持仓成本。手头没有现金的,操作时则不需要增加现 金,即使满仓被套也可以实施交易。当你进仓的股票,在其后几天被套了,也不要紧。当持有一定数量被套股票后,某天该股受突发利好消息刺激,股价大幅高开或 急速上冲,可以先将手中被套的筹码卖出一半或1/3仓,待股价结束快速上涨并出现回落之后,将原来抛出的同一股票全部买进。从而在一个交易日内实现多次的 高卖低买,来获取差价利润,很快就解套了。我可以严肃的告诉你,今年做长线投资的股票不赚钱,做T+1的短线也不赚钱,容易被套,而只有中线和超级短线赚 钱,也就是T+0。为什么呢?识时务者为俊杰,自08年1月份大暴跌以来,在与游资主力和国际热钱交战中,国有主力已经日落西山,尤其是基金重仓的股票跌 入深渊。而战胜者游资主力和国际热钱够采用T+0的战术,我们只有与狼共舞才能赚钱。弱市T+0套利战术是对一些股票职业机构的操作经验的总结,它需要较 强的职业经验与快速的市场感觉,它的具体实战应用与大盘有较紧密的关系。首先利用KDJ技术指标分析,以60分钟线为主要分析指标,结合日线分析。在弱势 市场行情,选择那些个股处于跌停位置,但不是历史新低的,KD线处于20左右低位,流通股本较掉的个股。选择一个条件是突出的,可以作为中线的品种,也就 是业绩不要太差的,每股收益在0.10元以上的即可,当然有高转送题材的更好,并应留有足够的后续补跌资金。只要获利3%就可以了结,如果股票套牢可根据 实际情况出仓、补仓,采取高抛低吸的快进快出战术,自行解套。
注意事项:T+0的操作时机要果断把握,不然时机出现了,把握不了。没有出现机会时 要耐心等待,不要盲目出击。通常在强势上升过程中,开盘高开是最佳的卖出时机 。在振荡上扬的过程中,急跌也许是最佳的买入时机。实施超短操作时,要讲究先买还是先卖的次序,做个书面计划。如果你对次日的判断是下跌,次日的操作是先 在高点出,后在低点进。如果你对次日的判断是反弹,则次日的操作是先在底点进,后在高点出。在买入方面,最好是分批进行,当天第一次买入后,如果继续下 跌,没有出现较大的差价时,最好不要继续买入,否则在真正的机会出现后,反而出现资金不足的现象。T+0操作时经常会遇到这样的事情,预测正确,操作失 误。原因在于对走势的把握不准,对大盘的走势,对板块的走势,对个股的股性把握没有达到统一。预测也只是一种假设,要将各种可能出现的情况和现有的条件分 析清楚,首先通过小的尝试,反复的介入和出局,达到对目标股主升段的把握。不断地T+0会无形的增加很多交易成本,给证券公司打短工。多数人亏钱可能就是 在手续费上面。但上升趋势和下降趋势的操作,有本质的区别。在下降趋势中必须要有见利就走的准备,因为你不能保证反弹什么时候会结束。在弱市行情下,还是 坚持见好就收的操作原则。
二、小结:T+0操作的风险大小,完全取决于选股的好坏,分析的细节上首先看个股的成交量的情况,从成交量上判断股性是 否开始活跃,不论上涨或下跌,总要有一个比较大的空间才值得参与,接着看形态,将要形成多头排列和暴跌阶段刚过,一定有短线的操作机会。今天下午就是最好 的买入时机。T+0最忌的就是追涨杀跌!切记:在弱市行情下,只能采取追跌杀涨,高抛低吸。在弱市行情下做T+0是最有效的股票解套战术,也是唯一的一种 解套方式。不少人认为,追跌杀涨、高抛低吸的成功率很低。不错,在做T+1成功率是低的。但我们是在做T+0,成功率可达80%!而且风险很小。


第三部分


今 天的大盘走势,细解一下《弱市T+0战术》以利我们明天的解套操作。今天的午盘判断错误,没有及时出仓,所以昨天和今天进仓的股票大部分被套。对于职业操 盘手,不可能100%的判断准确,但是只要做对了,即使大盘暴跌,损失也不大,加上熟练掌握了T+0战术后,很快就可以解套挽回损失的。以下就学习T+0 战术的实际意义,以及如何进行T+0操作做进一步的细解:
一、实际意义:对中国资本市场的股票,大多数人还是认为有长期投资价值,但我并认为它具 有长期投资的价值。这个观点在前面的文章已经阐述很清楚了,在这里不想多做解释。大部分的股民就是被这种“具有长期投资价值”的,根深蒂固的传统思想束缚 了,才被套在“高山上”的,好不容易辛勤劳动赚来的血汗钱,都被剥夺了。现在还有不少的股民,认为除了权证外,中国A股市场是T+1的制度,你怎么能做 T+0呢?,对此你还是认真学习了《五星战将-弱市T+0战术》才来上今天的课程。在当前行情下,做T+1,被套的几率很大,而只有做T+0才能赚钱。自 大盘跌入4500点之后,包括市场主力在内的,大户以上的投资者都在做T+0!有分析师发表文章说,2月份大盘股指有望站上3000点,甚至更高,但我在 前面的文章预计,最高站在2500点,从现在的行情走势看来,2500点是很难实现了。整个媒体都把股民的眼光转向即将召开的“两会”,但我对“两会”并 不报有任何的期望。事实上,中国A股市场的走势违背了股民的预期,那么你还是尽快认识新时期的A股市场走势规律,与时俱进,与市场主力同步,抛弃那些过时 的操作成规,学习新的适应当前行情走势的炒股技术。我对那些现在还再用“划线”、“黄金分割线”分析大盘的所谓“炒股大师”捏了一把冷汗,现在是什么朝代 了,难道大型的面食酒楼,还再用“擀面杖”做面条吗?当你量完了今天的走势后,明天预测的上涨,变成了暴跌了。我说这些话,并不是在说我行,而别人不行, 因为这些“炒股大师”面对的是众多的“无知散户”,看他们的点击率有多高,每天几百万人次,比中央电视台一套的收视率还要高?!他们的分析错误,将害死多 少人!我还是奉劝朋友们,对于现在还是用“擀面杖拉做面条”的所谓分析师的文章应该大打折扣。不听信为好,听了反而误导你。只要你认真学习了新时期的 T+0战术,你可以放心地在这个市场里翻江倒海,不用惧怕任何的暗礁与风浪,犹如一艘自在的航船,在大海里随着波浪起伏,扬帆前进,直达胜利的彼岸!掌握 T+0战术的重要性就在于此,在大盘做技术性反弹时,你可以坐在轿子上,让庄家为你抬轿,在大盘做技术性调整时,万一股票被套,你可以启动T+0战术进行 解套。市场主力是做T+0的能手,但你也是能手,正如一辆坦克和一辆摩托车在赛跑那样,谁能跑过谁呢?你能迅速拐弯或掉头,能进入羊肠小道飞奔,而笨重的 大坦克行吗?
二、操作技巧:不少人问我:T+0战术十分重要,但我怎么做不好T+0呢?在《五星战将-弱市T+0战术》中已经讲得很清楚了,首先 是选好股,选股是最重要的因素。每篇文章一直再提示活跃股,只有活跃股才有可能产生大的振幅。只要打开两市个股的K线图,随时都可以找到这类个股。需要多 少的股本呢?只要你有进仓2000股的股本就可以操作了。根据现在的市值,中盘活跃股的价位大多数在10元左右,那么只要你有2万元以上的股本就可以做 T+0了。现在我用看博朋友提供的一只被套股票600333长春燃气做讲解,不管你现在持有多少股,当然持股数越大越好做,我就用最难做的2000股做示 例:下午收盘价是5.86元,跌幅7.47%,就算我亏损了10%。
1、股性分析:首先打开它的K线图,看一下它的历史表现,个股股性一般,只有 几次的涨停,但比其它个股是活跃一些,表现在大阴大阳也不少。今天的走势与大盘一样,呈现一路走低的格局,今天无法开展T+0操作。启动T+0操作是在大 盘进行窄幅整理的时期内,因为大盘窄幅整理,也就是说,大盘不会出现暴跌或暴涨的行情,但是大盘做窄幅整理,并不是所有的个股也进行窄幅整理,随着大盘做 窄幅整理的是那些大权重股、大指标股,相反地,活跃股异常活跃。因为这类个股的庄家也是分析技术面的老手,在分析大盘不会暴跌的情况下,他们会积极地展开 超短博弈,股性越活跃越好操作。

2、操作细解一:在《五星战将-弱市T+0战术》中已经提示,在建立主仓位的前提下,才能开展T+0操 作,现在主仓位是2000股。我们将2000股分成各1000股。如果分成三份,恐怕成本太高。因为每股才5.86元,要考虑到操作成本,也就是佣金手续 费和税费,现在实行的是单边收费,税费降低很多,但要根据各个证券营业部的收费来制定自己的操作。如果在自己家里操作,厦门的总收费大约在1%以内。如果 这只个股的市值在10元以上,当然可以分成三份,甚至四份了,所以要根据个股市值来分批。按照这只股票当前的市值,明天我只能分成两仓,各1000股,只 能做两波。不管个股是否盈利或亏损,只要想做T+0降低成本的,如果明天大盘股指高开,我就先出部分仓位,也就是1000股。在弱市或熊市行情下,如果没 有政策的强有力支撑,大盘高开时,一般会低走。当然如果有政策支撑个股板块时,可以持股不动了。这就要求你关注持仓个股的政策面,既然要炒股就要认真。正 常情况下,出仓后个股开始回落下来,此时要关注大盘的情况,如果大盘股指处于低位时,大指标股、大权重股开始拉升股指,那么你就可以将刚才出仓的子弹再进 仓。因为只能做两波,所以力求要准确,否则达不到预期的效果!在前面的文章经常提示,做短线的要注意大盘和个股的60分钟线,总的趋势判断对了,不会出现 什么意外。进仓或出仓时,才参考30分钟线。我们不是在炒金或炒汇,所以不必去看5分钟或15分钟线,如果按照快速分时线指导你的操作会引起不必要的操作 失误,例如,踏空或早进仓而再次被套,越套越深。进仓后,电脑默认你还有1000股的“可用数量”,你还可以用1000股进行最后一个波段的操作。只要个 股振幅超过2%就可以了。也就是进出差价在2%以上就可以动手。去年发表的那篇文章提出要3%以上,是因为当时的印花税是双边收取,还是千分之三,现在的 印花税是单边的千份之一,降低很多了。持股数越大越有利可图。所以自从单边收费后,市场主力是乐开怀了!做T+0掌握买卖点十分重要,不仅要参考KDJ随 机指标、MACD慢速线,还要结合其它技术指标来分析,例如BBIBOLL多空布林线等,才知道个股当前的阻力位在哪里,支撑位在哪里,不至于被庄家骗 线,还有盘口的买卖盘情况,量比、委比和换手率等。K线基础知识是根本,包括均线和烛体,你从K线形态中了解到个股其后的走势,庄家的意图
时间 点        买 点  10.00        10.30      11.20        13.15      14.40                            卖 点9.32          10.00      14.00           


 
佚名 @ 2009-10-05 08:35

http://bbs.gupiao8.com/read.php?tid=1644896&page=e&#a

第一句废话:“明天的走势很关键”。
     说这话的时候,股评高手一脸严肃。然后便是分析,说明天如果不能上涨到哪个位置,就很危险;如果不下跌到哪个点位,就没有问题。其实,罗嗦这么多,归纳到一句,就是“明天涨了,就说明涨了;跌了也就说明跌了。涨了就不危险,跌了就危险。”这不就是废话吗?
奇怪的是,只要你留意,几乎每天都在说“明天的走势很关键”,哪一天不关键?我看只有这种股评家不喊的那一天,大盘才不关键。

第二句废话: “建议做好高抛低吸”。
    这一般是技术派高手的指点,注意逢高卖出、逢低吸纳。这还要你教吗?问题是什么时候是高,什么时候是低?你这句话永远正确,但永远没有可操作性,甚至是故弄玄虚、不负责任的废话。

第三句废话: “正如我昨天预测的那样” 。
    这种语调,往往在算命派的股评中,作为开场白,或者在文中频频引用。说错了的就回避,说对了的就不断强调昨天预测多么准。事实上,股市哪有神仙?所以,聪明的算命派往往在第一天把正反情况都说到,这样到了第二天,都可以引用正确的那一半内容。

总是把这句废话放在嘴边的人,你放心,在生活中就是极不自信的人。因为他的心思不用在研究股票上,而是用来处处证明自己。

以上经典废话,说到底就是忽悠,从某种意义上来说,这也是一种颇具特色的“黑嘴”呢。


 
Junglesong @ 2009-10-04 09:44


奇宝迷踪第一部:当阳地宫

链接:
http://www.tianya.cn/techforum/content/16/636506.shtml

大家自己去看看吧。


 
广州日报 @ 2009-10-04 09:43

http://www.sina.com.cn  2009年09月04日11:27  广州日报
面包中可使用的添加剂
面包中可使用的添加剂
两个原本一样大的面包,将右边的面包揉捏后变成了一个小面团,如此反差,全是因为面粉中加入了食品添加剂的缘故
两个原本一样大的面包,将右边的面包揉捏后变成了一个小面团,如此反差,全是因为面粉中加入了食品添加剂的缘故
type="text/javascript" src="http://news.sina.com.cn/iframe/survey/js/60/f_content_37180.js">
欢迎参与调查
1、听到这则新闻,你第一反应是什么?
吃惊
不可思议
无所谓
2、你还会吃面包吗?
不会
说不上来

  面包一“改良” 增肥三四倍

  广州质监:有面包改良剂含致癌溴酸钾

  业内爆料:9成面包店使用改良剂

  面包松软强筋的好口感可能是大量使用复合添加剂——面包改良剂

  更令人担心的是有些添加剂成分超标,甚至使用违禁添加物。一个面包落肚可能吃进了几十种添加剂

  东方网9月4日消息:记者昨日独家从广州市质监局获悉,近期对广州面包厂家和部分面包改良剂(复合添加剂)厂家的检查发现,有的面包改良剂违禁添加了我国2005年已禁用的溴酸钾。

  而近年的安全性研究发现,过去作为面粉强筋剂的溴酸钾具有一定的毒性和致癌作用。

  松软可口、香甜又有韧性的面包、糕点几乎成为不少市民每天的盘中餐,但谁能想到,“一个面包落肚同时也吃进了几十种添加剂”,尤其是松软、强筋的好口感很可能就是用了面包改良剂的效果,而更令人担心的是其中的添加剂成分超标,甚至是使用了违禁添加物。

  不仅如此,广州知名宾馆点心大厨也爆料,“市面上估计九成面包店都使用改良剂,因为可以大幅降低成本并可掩盖小师傅手艺不好”,而使用了改良剂的面包会增大2~3倍,并且除了溴酸钾外,有的改良剂还用了增白剂、超软粉,“有的能感觉到用了超量的改良剂,而过量并不利于人体健康”。

  市场:

  不少面包成分未标改良剂

  记者走访了市面不同档次的超市、饼店,发现大品牌超市和饼店的预包装面包一般都有标明“面包改良剂”或者“面包乳化剂”,但一些街边小店,则只是简单的包装。

  在人民中路上的一家著名连锁饼店,记者看到,不论是牛角包、酥皮包、方包,包装上都有配料表一栏,在其中一款牛角包中,除了标了小麦粉、白砂糖、牛油、鸡蛋等原料外,还标了“面包改良剂”,后面用括号表明了成分“淀粉、双乙酰酒石酸单(双)甘油酯、维生素C、酶制剂”。这已经是最为详细的标示,在另一家品牌饼店,则只是标示了“面包乳化剂”一项,并没有标示成分。而在宝华路附近的一家面包店,则只是简单地写着“面粉、奶油、水”的配料。

  对此,有市民指出,“即便标了改良剂也不知道是什么东西。”市民苏女士也对此很疑惑:“我亲眼看到一家面包店送进烤箱的面团才一点点大,烤出来居然大了差不多4倍,是不是添加了过量的添加剂呢?”

  对比:

  不同店同种面包价差大

  不仅如此,记者走访市场还发现,不同档次面包的价钱也相去甚远。同样是街头面包店,比如同样的肉松面包,一间普通的名不见经传的面包店只需2元或者2.5元一个,但名牌连锁店要3.5元一个。而这些知名面包连锁店的价钱又比中国大酒店、白天鹅宾馆这样的高档酒店自制面包要便宜许多,两者价格相差一倍以上。比如同样是咸方包,白天鹅的价格要10元,只有8片,但知名面包店只需5元左右,还是10片装。

  业内:

  用改良剂省面粉品质低

  这是为什么呢?“因为用了改良剂的面包不仅面粉使用量变小,而且面粉质量要求不那么高了,成本大大降低”,国家中式面点高级技师、白天鹅点心部大厨丘卫国以及广州市质监局食品处有关人士如此告诉记者。

  “传统的面包制作方法是不需要使用面包改良剂的,我们做的甜包只需高筋面粉、蛋、糖、纯牛油、酵母就行,并不需要用改良剂”,丘卫国表示,使用改良剂制作的面包,体积要比传统做法大,卖相更好,“同样是30克重的面团,传统做法制成面包后会增大1.5~2倍,而使用了改良剂的面包,则会增大2~3倍”,“采用改良剂后制作成本肯定要比传统做法做的低,起码面粉就少用了”。

  溴酸钾已明令禁止使用

  广州市质监局食品监管处处长李红兵说,广州市质监局今年计划对全市20多家生产复合食品添加剂的工厂产品摸查抽检,已经发现有面包改良剂含有违禁的致癌溴酸钾。

  广州市质监局食品处有关负责人表示,2005年以前,国家允许在小麦粉中添加溴酸钾,含量限制在30毫克/千克以内,起增白、强筋作用,但在用面粉制成的食品中最终不得检出。2005年国家卫生部对溴酸钾进行了危险性评估后,规定溴酸钾不得再作为食品添加剂。

  降成本增口感

  使改良剂受宠

  为何很多面包店大量添加改良剂?丘卫国认为,除了降低成本,还有其他原因。“中国消费者喜欢吃松软的面包,为迎合这种口味,面包店开始使用改良剂,这样即使制作手艺不够好的小师傅也可以做出口感好的面包。”丘卫国爆料,目前市面上估计超过九成的面包店都使用改良剂,为使面包变得白净,有的面包师傅还会添加增白剂。

  在一家著名酒家任职的赵先生也告诉记者,他们聘请了外地师傅做点心顾问,师傅提出很多改良意见,也做了很多试验品,不过酒家发现有些做法比如采用某些改良剂会令面包“发得过头”,虽然口感、卖相很好,但营养成分会有损失,就没有采纳。