Having a perfect set of pearly white teeth makes everyone look good and feel good about themselves. But with poor oral hygiene and lack of nourishment, your teeth will turn yellow and stain at some point, making you feel embarrassed to smile. There are certain dental products that you can use to make it white again but if you want to make sure, there are dentists that can provide you with your oral hygiene like PureSmile Sydney – one of the oral clinics available that have the best teeth whitening products in Australia.
1. Teeth whitening helps you get rid of the stain on your teeth.
There are a lot of food and drinks that can contribute to teeth discoloration. The color is too strong that regular cleaning sessions to the dentist may no longer help. Like over-the-counter teeth whitening products, teeth whitening products from your dentists can help you achieve that white set of teeth – only that it lasts much longer! Dentists check the condition of your teeth and see what they can do about it before they add whitening. They make sure every bit of stain on your teeth is eliminated to make it clean and fresh.
2. Whiter teeth will make you feel more confident.
If you have teeth discoloration, would you prefer to smile with your teeth shown or cover it with your mouth? Nobody wants to smile with their teeth especially when it lacks proper dental care but for people who have their teeth whitened from dentists, they feel more confident in showing it to other people. If you want to be more confident about your smile, you can schedule a visit to the dentist at PureSmile Sydney and get your teeth whitened by one of their experts.
3. Teeth whitening keeps your teeth healthy and strong.
As stated above, dentists will remove the stain found in your teeth. Having a stain on your teeth may show you the presence of bacteria. Everyone wants healthy teeth and gums and one way to prevent it from damage is by having it cleaned regularly by your dentist. Teeth whitening helps wipe out the stains found on your teeth namely: intrinsic stain and extrinsic stain.
4. Having a white set of teeth enhances your appearance and makes you look more attractive.
Even if you have the healthiest teeth and gums, that doesn't mean that you are immune to the damage that stains have. People who have a white set of teeth tend to be more attractive than those who haven't. There are teeth whitening reviews that you can read regarding this matter.
5. Teeth whitening gives you nothing but positive results.
What's not to love about having the perfect set of white teeth? The whiter your teeth are, the more reason you're going to smile about life. Why? Because you're confident enough to show it to anyone.


This mold allows you to make roses, poinsettias, lilies, sun flowers, Tulips and poppies! Or you can mix and match the leaves and petals to create your own custom flowers! There are 2 sizes of each leaf and petal included in the mold. An insturction sheet is included to help you start creating your own beautiful garden!
i can now make flowers as easy as 123. thanks!
Click the button below to add the Sculpey® Push Mold-Flowers & Leaves to your wish list.


text:
How Immune Cells Help Tumors Escape Body's Defenses
Arvind Suresh
suresha2@upmc.edu
Cynthia Patton
pattonc4@upmc.edu
1-800-533-UPMC (8762).
PITTSBURGH – New research from the University of Pittsburgh School of Medicine and the UPMC Hillman Cancer Center sheds light on how tumors use the body's regulators of immunity for their own benefit. Published today in Nature Immunology, the findings could be used to develop the next generation of immune therapies to fight various cancers.
"While cancer immunotherapy drugs that block inhibitory cell surface molecules like PD1 have revolutionized cancer care, only about 20 percent of patients clear their tumors," said senior author Dario Vignali, Ph.D., who holds the Frank Dixon Chair in Cancer Immunology, and is professor and vice chair of immunology at Pitt's School of Medicine. "Our findings uncovered a previously unknown biological mechanism that reveals new therapeutic approaches to promote anti-tumor immunity."
Vignali and his team focused on a group of immune cells called regulatory T cells (Tregs), which help maintain a delicate balance in the immune system. They do so by tamping down immune responses, keeping the system sensitive enough to catch threats, but not so sensitive that they result in autoimmunity – attacking normal cells. To achieve this control, Tregs release small proteins called cytokines that can have different effects on cells.
Previous research, including findings from Vignali's lab, had shown that tumors cleverly take advantage of Tregs inside the tumor's microenvironment to turn off killer T cells and evade the body's immune defenses.
In the current study, first authors Deepali Sawant, Ph.D., a former post-doctoral fellow, and Hiroshi Yano, a current graduate student in Vignali's lab, along with the rest of the team, set about trying to shed light on how Tregs turned off killer T cells using two inhibitory cytokines called interleukin-10 (IL-10) and interleukin-35 (IL-35).
Their first finding, in mouse and human tumors, was that populations of Tregs could either make IL-10 or IL-35 but, surprisingly, not both at the same time. "This was unexpected because we had anticipated that activated Tregs would use all tools available to them to suppress immune responses. Instead it seems they have to make a choice to secrete only one inhibitory cytokine," noted Vignali, who also is co-leader of the Cancer Immunology and Immunotherapy Program at the UPMC Hillman Cancer Center.
The team then used a mouse model of cancer to show that for tumors to effectively suppress the immune system, they needed both types of Treg cells – those that secrete IL-10 and those that secrete IL-35.
"It's like making a latte; you need both coffee and milk," explained Vignali. "Without both, you won't have a latte!"
Investigating further, they found that the cytokines, acting together, activated a protein called BLIMP1, which effectively disabled killer T cells by making them express a large variety of inhibitory cell surface molecules, such as PD1, LAG3, TIM3 and TIGIT, that suppresses their ability to detect and kill cancer cells.
This finding is important, says Vignali, because many current clinical trials are focused on immunotherapies that block just one or two such inhibitory proteins that would, in turn, activate killer T cells. But developing drugs that block IL-10 or IL-35 could have a much greater effect by preventing the expression of many inhibitory proteins at once.
The authors also note that since drugs targeting Tregs are already being tested in clinical trials, finding the precise mechanisms by which they work could provide clues to making more effective drugs, or help design better combinations with currently available immunotherapies to improve treatment success.
A complete listing of all the study authors can be found in the online article.
The study was funded by National Institutes of Health grants R01 CA203689, P01 AI108545, P30 CA047904 and S10 OD011925, and by Tizona Therapeutics. Vignali and study co-author Creg Workman, Ph.D., of Pitt, have submitted patents covering IL-35.

redpajama_set_name: RedPajamaCommonCrawl


Home body health health news life Toilet useful video wrong YOU'VE BEEN DOING THESE 17 THINGS WRONG YOUR WHOLE LIFE!
earphones, how to hold a pen, how to cross words, etc. Your life will be much easier, you'll see!


The aim of the project is to specify, simulate and finally develop a device which will realize the concept of FAMTAR: Flow-Aware Multi-Topology Adaptive Routing. This is the applicants idea to realize the routing in the IP networks. FAMTAR is possible due to the popularity of flow-aware traffic management and constantly increasing available computational power in network devices. In FAMTAR, alternative routes are created dynamically, as needed. It is possible that between points A and B, the transmissions follow n different paths, where n is practically unlimited..
extensive tests of the developed device (solution).
The final outcome of the project will be a router which realizes the FAMTAR concept, i.e., novel approach to routing in the telecommunication networks. This concept has great chance to be used in the real networks and is endorsed by the large telecom companies.


Men's trainers are available in a variety of styles at Spartoo.co.uk. They are perfect for doing sports, or for just having a sporty look, or even for going out in town, or for an everyday look at work or a quiet evening with your significant other... Browse our page of men's shoes for sale and get a pair of men's trainers. Try a new style by changing your shoes! One day your Nike Roshe trainers, the next day Converse All Star , then an elegant leather model from Redskins or Clarks, and you can always keep a pair of Stan Smiths around just in case, as well as New Balance for a super trendy look that goes with your entire wardrobe.
Whether its in the men's fashion magazines, on the television, at work, or in your friends' closets, you can see that trainers are the real must-have as far as men's shoes are concerned. To be cool and get a trendy look, trainers are your best bet. When you shop online on Spartoo, you'll find all the most popular models of trainers and the new collections from your favourite brands. Plus, the design isn't the other feature: these shoes are also made for unbeatable comfort. Find high top fashion trainers as well as men's shoes at low prices, in just a few clicks on our site. Don't forget to have a look at the boots page and smart shoes to find a model that meets your style and needs perfectly.
With more than 20,000 models of men's shoes, Spartoo.co.uk has quickly become the favourite shoe store of many fans of online shopping. And, Spartoo UK confirms their place in the world of men's shoes. Leather, canvas, fur-lined, with laces or velcro, black or multi-coloured, you'll find a wide selection of trainers online. The main advantage of sneakers lies in the fact that they can be worn with almost any type of men's clothing. You can wear your new shoes with a traditional trouser, a pair of men's jeans or even a pair of shorts that you can order directly from Spartoo.co.uk!


I have a son who is a diabetic and has been since he was 2; it's been 8 years now. My problem is regarding my second son who is 4 -- he, about a year ago, started having problems with wetting at night, etc. I checked his blood on occasion from then and his sugars fluctuate wildly. We took him to an endocrinologist based on recommendations from our pediatrician. His A1c's are normal. They did a IVGTT -- they said that he is on the low end of normal for his C-peptide, but still with in normal levels. At this time, he was not considered to be a diabetic, but they said could be possibly just beginning.
Here's our problem. This morning, he woke up and was very whiny and cranky, so I checked his blood and he was 44 -- he had some juice and then breakfast, later we checked his urine and his blood again and his urine had extremely large ketones present and his blood sugar was 190. After several hours his sugar was 97 and his ketones were normal.
What is going on? The endo is baffled, because at present, he is not a diabetic, but is indicating that he could be and that it is not normal to have sugars and ketones doing these things as often as this happens. His A1c's are all in the 4.3- 5.0 range. Could this possibly be a form of MODY? Our endo does not have much experience with this. But I ask this because my father who is diabetic for 25 years on and off has been suggested to have MODY. Twenty-five years ago, he was put on an oral agent at the age of 28 -- it caused his sugar to go too low, so they took him off, then after several years, he was back on it, he did this for 15 years on and off. Then 5 years ago, he was placed on insulin, now he is going to less and less doses because he is low much of the time even despite eating, etc. He has not lost weight, so this would not be making his sugar "normal again".
Please help us here, we do not know where to turn, and our endo feels that he should have an IVGTT every 6 months -- but in cases of MODY -- would this really reveal much?
I think the first step should be to ask your younger son's pediatrician to arrange for an antibody test. A number to call that can help is 1-800-425-8361. From your description, it sounds like there is about a 95% chance that the test will be negative and this will tell you that he does not have Type 1A (autoimmune) diabetes, which is by far the commonest form in North American Caucasian children. In the unlikely event that the test is positive you might want to consider participating in the national DPT-1 research study which is designed to avert actual clinical diabetes. If the test is negative and especially as the A1c's are normal you can ignore the IVGTT and the one high blood sugar and give some thought to other explanations for the enuresis and urine ketones. The former might well be due to anxiety that he might be getting diabetes like his brother or resentment that his brother may be perceived as getting a lot of extra attention. A combination of patience, simple counselling and sometimes medication can nearly always put this right.
As to the ketones, since you make no mention of glucosuria, I think this reflects a long overnight fast and is really very common in this age group where it simply reflects a temporary reliance on fat rather than carbohydrate for energy. One of the 'energy' bars taken as a snack just at bedtime could well put this right and the low morning blood sugar too.
Since your oldest son is apparently insulin dependant and therefore Type 1A, presumably it is very unlikely indeed that your second son would have one of the many variants of MODY. A specific diagnosis can be made; but it is difficult to organise and expensive and in any case the treatment would not be different from the more conventional forms of diabetes.


A long-standing firm in the Warminster area is looking to recruit an experienced Civil Litigation Lawyer to bolster their established team.
This firm is strongly rooted in the community and have been providing legal support to individuals and local businesses for over 80 years, with particular expertise handling litigation, property and private client cases.
Due to an ongoing increase in work, there is now an opening for you as a Civil Litigation Lawyer to join this reputable firm. This is an excellent opportunity for you if you wish to work in a role with high levels of autonomy, a collegiate working environment, and the support of an experienced group of colleagues.
The ability to contribute to the firm through business development and marketing would be particularly advantageous.
This is a great opportunity for a Civil Litigation Lawyer looking to join a traditional practice in the Warminster area with a loyal client base. In return, you will receive a competitive remuneration package and good levels of ongoing support.
For immediate consideration please apply now or for further information, please contact Sophia Carr at G2 Legal. 0117 900 0888.


The museum exhibits unique collections. Among them, the oldest icon of Cyprus, of Agia Marina in orans position framed with scenes of her martyrdom, the only one dating back to the pre-iconoclastic period, 7th-8th century.
The main collection of icons dates from the 12th to the 19th century.
The museum possesses a remarkable collection of ecclesiastical metallic objects from the 6th century, censer, lamp, candlesticks, mitres, chalices and others unique and extremely important exhibits. A distinguished position among the bishop's staffs is held by that of the Metropolitan os Ephesos Meletios dating to 1764.
The frescoes housed in the museum are dates in the 11th – 12th century, moved from ruined churches.
In the museum you can also admire a rich collections of wood carvings, iconostase, sanctuary doors, crucifixions and lypitera from 14th century, crosses for benediction and sanctification.
The sacerdotal vestments and ecclesiastical embroidery is particularly noteworthy, with gold vestments of the 18th and 19th century, chasuble, maniples, stoles, cloak, epitaph from 19th century and others.
The collection of manuscripts and old books is very valuable. Among them are the Gospels of 1462 and 1604, Hymnologium of 15th century, Firmany of 1853, music books, codexes of laws.
Βρίσκεται πλησίων της εκκλησίας της Αγίας Παρασκευής Γεροσκήπους στο χώρο όπου παλαιότερα στεγαζόταν το Δημοτικό Σχολείο.


Lavazza story started in Turin at the end of 19th century, so old our local passion for coffee blends is. After all though, it shouldn't come as a surprise given our long history of coffee and chocolate houses you can still visit these days.
Back in 1894, in Via San Tommaso 10, Luigi Lavazza bought a small drogheria - the grandmother of our contemporary grocery stores, where you could buy lose spices, teas, coffees and everything else you actually needed, concerning foods and household products, just in a family owned scale.
This is still a Lavazza location, right downtown and you can drop in for a coffee, lunch or dinner after your shopping or visiting a museum; as for the company, it is still run by the 3rd and 4th generations of the Lavazza family!!
Following his passion for coffee, Luigi studied the different coffee plants and aromas and was the first one in Italy to create coffee blends to best satisfy his customers. Even today, we still drink Lavazza coffee blends that present great balance and unique flavors.
The Lavazza company was registered in 1927 in Turin and around the same years, a two layer paper was introduced in the packaging to keep the coffee fragance and allow consumers to buy larger quantities and coffee to keep at their homes.
In fact, these were the same years Italians could buy a coffee pot to make "an espresso as good as the coffee shop one" thanks to the Bialetti moka (also from Piedmont!).
In 1946, after WWII and the coffee embargo, the Lavazza sons decided to sell coffee in packages -like those we buy today, instead of lose coffee, as they had done up that time. 1950 marked the arrival of the coffee vacuum sealed tins that allowed for a longer lasting aroma and a broader distribution.
In the 1950s, all the roasting process was completed in the Turin headquarters thanks to a highly innovative system that produced more than 40,000 kg (88,185 lb) of coffee a day. The Lavazza coffee cup was literally on top of Italy!
In 1959 Lavazza dec (decaf) was launched) and in 1965, the largest roasting plant in Europe was opened in the Turin suburb.
To come out of the economical crisis Italy was going through, in 1971 Lavazza designs the new vacuum sealed coffee pack, the new version of that old double layer pack that in the late 1920s had allowed many Italian families to stock up coffee.
The Luigi Lavazza Center for Research and Coffee studies was also opened in 1979 and it is still the largest coffee academy for the training and innovation of the espresso culture in the world.
In 1982, the first Lavazza subsidiary opened in France and Lavazza Ltd. opened in London in 1990 after the launch of the first coffee machine to use coffee capsules.
1992 marks the beginning of the Lavazza calendars and the production of the first one is given to Helmut Newton who highlights the relationship between the company and coffee.
In 2004, the Lavazza Foundation was born to improve living conditions in coffee growing countries. In the same year, the Lavazza Blue system arrived in many offices to allow all workers to enjoy their "heaven in a cup" - the first Lavazza slogan "Lavazza il paradiso in tazza".
A consistent commitment for sustainability and environmental engagement has been leading Lavazza up to the 2015 challenge: allowing Italian astronaut Samantha Cristoforetti to enjoy her espresso high up in the outer space. How else could she have ever survived for 6 months without a drop of coffee worth this name??


So after 35 years, as predicted in this column last week, the wait is over and the Albion have done the double over Crystal Palace.
Whilst derided as 'not a proper derby' in certain quarters, anyone whose attended any of the previous encounters between Brighton and Crystal Palace will testify they certainly don't lack intensity or passion.
Spinner Adil Rashid's recall to the England side for the first Test at Edgbaston against number-one-ranked nation India has certainly stirred up a hornets' nest.


Search for records by using field tags, set combinations or a combination of both. Booleans and wildcards are allowed.
Finds records in which McGill University appears in the Addresses field along with Quebec and Canada.
Finds records of articles written by this author.
Finds records in which the following conference information appears in the Conference Information field.
You must have a subscription to one or both Conference Proceedings citation indexes to search for and to view conference records.
Finds records in which this city appears in the Addresses field.
Finds records in which this country appears in the Addresses field.
Ed=Korczyn AD New Field Tag!
Finds records of articles edited by this editor.
FO=Academy of Natural Sciences New Field Tag!
FT="National Agency for the Promotion of Science and Technology" New Field Tag!
Finds records in which the name of this agency appears in the Full Text field.
Use quotation marks when entering the full name of an organization, especially when the organization's name contains articles and Booleans. If not, the system will display an error message.
Finds records in which this group author appears in the Group Author(s) field.
Finds records in which this book group author appears in the Group Author(s) field.
Finds records in which this institution appears in the Addresses field.
Finds records in which this state (New York) appears in the Addresses field.
Finds records of articles that appear in Well Being published in 2007.
Finds records in which this street address appears in the Addresses field.
Finds records in which this suborganization appears in the Addresses field.
Finds records of articles that appear in this journal that also contains the Topic term child (or children).
Finds records containing the terms sanitary, sanitize, or sanitizing and either the terms fruit (or fruits) and/or vegetable (or vegetables) in the title of an article.
Finds records containing the terms fish and batter (or batters and battered) and chip (or chips) in the Abstract, Title, and/or Keywords fields of a record.
Finds records containing the terms sulfur (or sulphur) and nitrate (or nitrates) that also contain the search terms found in set #1.
Finds records containing the terms quark (or quarks) and lepton (or leptons and leptonic) that also contain the search terms found in set #1, but excludes all records that contain the search terms found in set #3.
FG=Grant Number New Field Tag!
FO=Funding Agency New Field Tag!
FT=Funding Text New Field Tag!
Each search term in the query must be explicitly tagged with a field tag. Different fields must be connected with Boolean operators.
All current rules regarding stopwords apply to the Topic and Title fields.
Extraneous spaces are ignored by the product. For example, extra spaces around opening and closing parentheses ( ) and equal (=) signs are ignored.
For set combinations, enter a number (#) sign before each set number in the query.
Do not use the SAME operator with different field tags. For example, TS=cell SAME AU=Wells is not allowed.
The total number of search sets that you can run during a session is 200. If you attempt to run a query that exceeds the maximum, the product displays an error message and the search does not run.
To search for anonymous authors, enter AU=anon.
Note that anon will also find authors whose last name is Anon.
To search on the name AND, OR, NOT, and SAME, enclose the name in quotation marks. Example: "Or"


text:
Gelechia maculatusella is een vlinder uit de familie van de tastermotten (Gelechiidae). De wetenschappelijke naam van de soort is voor het eerst geldig gepubliceerd in 1875 door Chambers.

maculatusella

redpajama_set_name: RedPajamaWikipedia


To prevent panic attacks, it's necessary to first know what causes a panic attack and what does not. If you do not know what is causing your issues to may never know how to lessen their involvement in your life. This article should contain a few solutions you will find efficient in your situation.
Becoming thoroughly familiar with the symptoms and warning signs that herald your panic attacks is an important early step in fighting them off. You can more effectively implement skills and techniques to avoid or manage your panic attacks if you know when a panic attack is triggered in your body. This will help immensely.
Talk to yourself positively and keep your thoughts based on calm subjects when you're having a panic attack. Know that you will get through it. Losing control is not going to happen, so remind yourself of that.
Taking long, purposeful breaths is one of the best ways to calm the effects of a panic attack. Deep breathing is effective not only because it keeps you occupied and relaxed but also because it performs several important physical functions like lowering your pulse and blood pressure, increasing circulation and easing tension in your body.
Sometimes diverting all of the negative energy associated with your panic attacks to constructive projects like house cleaning can really help. This will let you release the pent-up energy, and your organization efforts may divert future attacks.
The fear of experiencing a panic attack will often bring one on. Try not to dwell on your symptoms and feelings, and how you will handle an attack. If you do not, you could end up facing an attack that was brought on for no reason. For example, if someone tells you not to think about pizza, pizza will be all you can think about.
If you know someone who experiences panic attacks, learn the symptoms and how they are manifested. Then, you will recognize the symptoms early and be better equipped to calmly handle an attack when one happens. Panic attack symptoms are often similar to symptoms of serious physical problems like heart attacks. Sufferers may have difficulty breathing or swallowing, feel dizzy or lightheaded, shake or tremble, get nauseated or feel hot in a cool room. You should first ensure that the person isn't having an actual heart attack. If they are, they require medical help.
Controlled breathing and regular meditation can be very effective in easing anxiety and reducing panic attacks. Take a series of deep, full breaths, counting each time you inhale and exhale. Continue until you have done 10 repetitions. Depp breathing oxygenates your brain for improved function and takes your attention away from any negative thoughts.
Never allow the simple idea of a panic attack throw your anxiety into overdrive. You won't be harmed by a panic attack, so keep that in mind. You should constantly remind yourself that you are safe and in control. You can train your mind to ignore these feelings of fear, and focus on your real feelings.


1. What can I seek for, Father, but Your Love?
Perhaps I think I seek for something else; a something I have called by many names.
Yet is Your Love the only thing I seek, or ever sought.
For there is nothing else that I could ever really want to find.
What else could I desire but the truth about myself?
2. This is your will, my brother.
And you share this will with me, and with the One as well Who is our Father.
To remember Him is Heaven.
And only this is what it will be given us to find.


Even though I was in a very well paid full time job when I started writing My Recycled Soul, I had this inner drive to write a story from finish to end, and once I started writing, I could not stop. The day I finished My Recycled Soul, I felt such an immense sense of accomplishment, greater than anything I had achieved up to that point in my life (career-wise, that is).
Can I get a signed book?
Post a comment on my Facebook Page saying 'Where can I get a signed book?' and I'll send you a Private Message.
Anything in, on or smothered with chocolate.
Sinead asks me this all the time, and it seriously changes from day to day. All colors are pretty.
I do love cats more than dogs, but only because cats are so much more independent. If I had a bigger house though, I'd have a dog as well. Dogs love with a total abandonment and recklessness without holding anything back, and sometimes I miss that.
Three - if you don't include my husband :O) - I have a son, William. Two daughters, Tahne and Sinead, one daughter-in-law, Adelaide, one son-in-law, Danie and one most awesomest grandson, Nathan.
Your books aren't published in my country. How do I get one?
I always try to include online links on each book page. You can also go to your library or favourite bookstore and ask them to order a copy.
Are they going to make a movie of ForNever?


Welcome to the Master of Arts (Theology) program.
Master of Arts degrees in Old Testament, New Testament, Second Temple Judaism, Theology and Christian History are designed to equip students for advanced study at the doctoral level and thus all programs require a thesis. Acadia graduates have been accepted into major research universities across North America and in Europe and are teaching in Bible colleges, universities, and seminaries worldwide.
Master of Arts degrees in Leadership and Spiritual Formation, Evangelism and Mission, Youth and Young Adult Ministry, Discipleship, Pastoral Care and Counselling, Chaplaincy and Spiritual Care, or Prison Chaplaincy are designed to equip individuals seeking non-ordained leadership roles in church and society. Students in these subjects can either complete a thesis or a project.
Applicants will have a four-year baccalaureate degree, or its equivalent, from an approved university with a grade point average of 3.00 on the courses taken in the major field in the last two years of undergraduate studies.
Applicants are encouraged to apply for admission as early as possible during the academic year prior to their intended enrolment. International applicants are normally admitted no later than April 1st for a September start. Although Canadian applicants can apply up until the start of new term, it is recommended that they apply months in advance to ensure successful registration.
The application is a five step form that should take you approximately 15 minutes to complete. If you are not able to complete the application all at once, there is a save button located at the bottom of each section. Make sure to save any completed sections before exiting the online application.
If you are an International applicant, in most cases you will need to submit an official TOEFL (Test of English as a Foreign Language)/IELTS (International English Language Testing System) score directly from the TOEFL/IELTS Testing Centre.
After your application has been received, you will receive an automated email with instructions on how to log into your Acadia Central account. You will be able to verify the status of your application from this account.


text:
CANADIAN NATIONAL RA
Delayed - 01/17 04:16:04 pm
155.27CAD +0.19%
Canadian National Railway : Our EcoChampions improve energy efficiency of lighting at Baton Rouge yard
After an energy audit revealed Baton Rouge could greatly improve its energy efficiency by replacing aging lights in the yard, CN Facilities Management decided to go for a longer-term fix.
Instead of repairing damaged light poles and replacing burned out bulbs, the team brought in 17 new poles and installed 50 new LED light fixtures across the yard. They also upgraded the power lines at the same time to support the new lighting, which helps avoid power outages from other activity. The project was funded by the EcoFund.
"The new lighting is almost 21% more energy efficient, saving $9,000 and reducing 31 metric tons of CO2 annually," says Manni Leo, Supervisor, Facility Maintenance for the mid-west who was assisted by Jerry West, Facility Supervisor for the Gulf region, to find local contractors to do the lighting upgrade.
"Safety has also been improved with more light in the yard. There are no longer any dimly lit areas, which has increased visibility for drivers and employees walking around, especially in avoiding tripping hazards. The Baton Rouge team saw the advantages of the work right away and were very supportive," adds Manni. "The improved lighting gives new life to the yard."
CN's EcoConnexions Employee Engagement program - a partnership with Earth Rangers - drives sustainability across CN's network by empowering employees and their families to conserve energy, reduce waste, and improve housekeeping.
Visit our "Delivering Responsibly " section to learn more about sustainability at CN.
CN - Canadian National Railway Company published this content on 01 December 2021 and is solely responsible for the information contained therein. Distributed by Public, unedited and unaltered, on 01 December 2021 15:00:06 UTC.
All news about CANADIAN NATIONAL RAILWAY COMPANY
Deutsche Bank Upgrades Canadian National Railway to Buy from Hold, Adjusts...
CN Rail Raised To Buy From Hold and Target Price Lifted To US$137 from...
CN Rail Brief: Deutsche Bank Adds This Is Worth Over US$20 Billion In Equity...
CN Rail Brief: Deutsche Bank Says "We estimate CN's existing management and...
CN Rail Brief: Raised To Buy From Hold and Target Price Lifted To US$137...
 Summary  Quotes  Charts  News  More
 Calendar  Company  Financials  Consensus  Revisions


text:
Q: Confusion about python recursion I was writing a recursive function to solve a problem where essentially you are trying to find all combinations to reach the target sum with a given number of number and each number is smaller than a certain limit.
The code I wrote looks like:
results = []

def findSchedulesHelper(workHours_left, dayHoursLimit, days_left, res):
    if workHours_left < 0:
        return
    elif workHours_left > 0 and days_left == 0:
        return
    elif workHours_left == 0 and days_left != 0:
        for i in range(days_left):
            res.append(0)
        results.append(res)
        return
    elif days_left == 0 and workHours_left == 0:
        results.append(res)
        return
    else:
        for i in range(dayHoursLimit + 1):
            res.append(i)
            findSchedulesHelper(workHours_left - i, dayHoursLimit, days_left - 1, res)
            res.pop()

def findSchedules(workHours, dayHours, pattern):
    # Write your code here
    num_question_mark = 0
    total_hours_so_far = 0
    for char in pattern:
        if char == "?":
            num_question_mark += 1
        else:
            total_hours_so_far += int(char)

    hours_left_to_fill = workHours - total_hours_so_far

    for i in range(dayHours + 1):
        findSchedulesHelper(hours_left_to_fill - i, dayHours, num_question_mark - 1, [i])
    print results

findSchedules(3,2,"??2??00")

but this gives the wrong answer.
If I change one line and makes it:
results = []

def findSchedulesHelper(workHours_left, dayHoursLimit, days_left, res):
    if workHours_left < 0:
        return
    elif workHours_left > 0 and days_left == 0:
        return
    elif workHours_left == 0 and days_left != 0:
        for i in range(days_left):
            res.append(0)
        results.append(res)
        return
    elif days_left == 0 and workHours_left == 0:
        results.append(res)
        return
    else:
        for i in range(dayHoursLimit + 1):
            findSchedulesHelper(workHours_left - i, dayHoursLimit, days_left - 1, res + [i])

def findSchedules(workHours, dayHours, pattern):
    # Write your code here
    num_question_mark = 0
    total_hours_so_far = 0
    for char in pattern:
        if char == "?":
            num_question_mark += 1
        else:
            total_hours_so_far += int(char)

    hours_left_to_fill = workHours - total_hours_so_far

    for i in range(dayHours + 1):
        findSchedulesHelper(hours_left_to_fill - i, dayHours, num_question_mark - 1, [i])
    print results

findSchedules(3,2,"??2??00")

Then everything is correct. I am really confused about why this is the case. I tried to do some debugging and found that append and pop were not working the way I expected them to do. It would be great if anyone can explain what exactly is the difference between the two ways I did the function.

A: The first program adds an item to the end of res, makes a recursive call to findSchedulesHelper() and after the call, removes the item added:
res.append(i)
findSchedulesHelper(workHours_left - i, dayHoursLimit, days_left - 1, res)
res.pop()

Whereas the second program passes a new list that is everything in res plus the extra item.  It doesn't need to clean up after the recursive call:
findSchedulesHelper(workHours_left - i, dayHoursLimit, days_left - 1, res + [i])

One difference between the two is due to this code:
for i in range(days_left):
    res.append(0)

That is, the recursive call to findSchedulesHelper() has the potential to change res.  If it does, the res.pop() on return may be removing something else than you think it is.  And there may be extra data at the end of res on the next call.  The second program doesn't suffer this issue as it passes a copy of res and never again looks at, or reuses, the copy.
The next potential problems are the multiple calls to:
results.append(res)

In the first program, you're passing the same res list, so results ends up with multiple pointers to res all of which are the same exact list, always reflecting its current state, not its state when it was added to results.  In the second program, you're passing a copy of res so all the entries on results are different, the state of res when it was added to results.

redpajama_set_name: RedPajamaStackExchange


text:
安装完rabbitmq需要修改系统的部分参数,能提高其并发的连接数和队列数。

```
修改fs.file-max:
	1. `echo 6553560 > /proc/sys/fs/file-max` 当前有效,重启无效
	2. 修改`/etc/sysctl.conf`,加入`fs.file-max = 6553560`。重启生效

修改`/etc/security/limits.conf`,加入以下配置,重启生效:
	* soft nofile 65536
	* hard nofile 65536

ulimit -SHn 65536 当前Session有效
```

> 注:fs.file-max值必须大于ulimit值,ulimit的hard值大于等于soft值。

> [Operating System Kernel Limits](https://www.rabbitmq.com/configure.html#kernel-limits)

### 安装

Clustering安装

有三台机器,`hostname`分别为`server1`、`server2`、`server3`,对应的IP分别为`192.168.1.11`、`192.168.1.12`、`192.168.1.13`。

三台机器上增加`/etc/hosts`配置:
```
192.168.1.11 server1
192.168.1.12 server2
192.168.1.13 server3
```

三台机器上安装MQ服务:
```shell
# 创建 rabbitmq-server 仓库
shell> curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
# 创建 erlang 仓库
shell> curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
# 更新所有软件包
shell> yum update -y
# 生成 rabbitmq_erlang、rabbitmq_rabbitmq 仓库元数据缓存
shell> yum -q makecache -y --disablerepo='*' --enablerepo='rabbitmq_erlang' --enablerepo='rabbitmq_rabbitmq-server'
# 安装依赖包
shell> yum install socat logrotate -y
# 安装 erlang、rabbitmq-server
shell> yum install --enablerepo='rabbitmq_erlang' --enablerepo='rabbitmq_rabbitmq-server' erlang rabbitmq-server -y
# 开机启动
shell> systemctl enable rabbitmq-server
# 启动 rabbitmq 服务
shell> systemctl start rabbitmq-server
```

在三台机器上修改配置文件:
```shell
# 修改配置
shell> cat << EOF > /etc/rabbitmq/rabbitmq.conf
cluster_name = mq-test-cluster

cluster_partition_handling = pause_minority

## If a message delivered to a consumer has not been acknowledge before this timer
## triggers the channel will be force closed by the broker. This ensure that
## faultly consumers that never ack will not hold on to messages indefinitely.
consumer_timeout = 1800000
EOF
# 从 server1 上拷贝 .erlang.cookie,确保三台机器的 .erlang.cookie 值相同
shell> scp root@server1:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie
# 重启服务
shell> systemctl restart rabbitmq-server
```

加入集群,在`server2`、`server3`上执行下述命令:
```shell
# 停止 app 服务
shell> rabbitmqctl stop_app
# 重置node,删除所有的资源及数据
shell> rabbitmqctl reset
# 加入 server1 集群
shell> rabbitmqctl join_cluster rabbit@server1
# 启动 app 服务
shell> rabbitmqctl start_app
```

创建admin账号(任意挑选一台执行):
```shell
# 新建用户 - 用户名:admin 密码:admin123
shell> rabbitmqctl add_user admin admin123
# admin 用户设置用户标签为 administrator。management UI访问权限通过用户标签控制。参考链接:https://www.rabbitmq.com/management.html#permissions
shell> rabbitmqctl set_user_tags admin administrator
# 设置 admin 在 "/" virtual host 中的 configure、write、read 权限
shell> rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
```

三台机器上安装 management ui 插件,不一定每台机器都需要安装。多台安装后,可在前面套上反向代理,达到负载均衡作用:
```shell
# 安装 management ui 插件
shell> rabbitmq-plugins enable rabbitmq_management
```

* [Production Checklist](https://www.rabbitmq.com/production-checklist.html)
  * Virtual Hosts, Users, Permissions
  * `Memory` - 默认值 `vm_memory_high_watermark.relative = 0.4`
  * `Disk Space` - 推荐值 `disk_free_limit.relative = 1.5`
  * Open File Handles Limit
  * Cluster Size
  * Node Time Synchronization

> 注:rabbitmq默认是用`rabbitmq`用户启动服务的,所以如果你改变了Mnesia database或logs文件的地址,请确保这些文件的拥有者是`rabbitmq`,让其有权限操作文件。

### Distributed RabbitMQ

* [Distributed RabbitMQ](https://www.rabbitmq.com/distributed.html)
* [`Federation` VS `Shovel` VS `Clustering`](https://www.rabbitmq.com/distributed.html#summary)

#### Clustering

_Node Names (Identifiers)_

RabbitMQ nodes are identified by node names. A node name consists of two parts, a prefix (usually `rabbit`) and hostname.
For example, `rabbit@node1.messaging.svc.local` is a node name with the prefix of `rabbit` and hostname of `node1.messaging.svc.local`.

Node names in a cluster must be unique. If more than one node is running on a given host (this is usually the case in
development and QA environments), they must use different prefixes, e.g. `rabbit1@hostname` and `rabbit2@hostname`.

In a cluster, nodes identify and contact each other using node names. This means that the hostname part of every node name [must resolve](https://www.rabbitmq.com/clustering.html#hostname-resolution-requirement).
[CLI tools](https://www.rabbitmq.com/cli.html) also identify and address nodes using node names.

When a node starts up, it checks whether it has been assigned a node name. This is done via the `RABBITMQ_NODENAME`
[environment variable](https://www.rabbitmq.com/configure.html#supported-environment-variables). If no value was explicitly configured,
the node resolves its hostname and prepends `rabbit` to it to compute its node name.

If a system uses fully qualified domain names (FQDNs) for hostnames, RabbitMQ nodes and CLI tools must be configured to
use so called long node names. For server nodes this is done by setting the `RABBITMQ_USE_LONGNAME` environment variable to `true`.

For CLI tools, either `RABBITMQ_USE_LONGNAME` must be set or the `--longnames` option must be specified.

_What is Replicated?_

All data/state required for the operation of a RabbitMQ broker is replicated across all nodes. An exception to this are message queues,
which by default reside on one node, though they are visible and reachable from all nodes. To replicate queues across nodes in a cluster,
use a queue type that supports replication. This topic is covered in the [Quorum Queues](https://www.rabbitmq.com/quorum-queues.html) guide.

_Nodes are Equal Peers_

Some distributed systems have leader and follower nodes. This is generally not true for RabbitMQ. All nodes in a RabbitMQ
cluster are equal peers: there are no special nodes in RabbitMQ core. This topic becomes more nuanced when [quorum queues](https://www.rabbitmq.com/quorum-queues.html)
and plugins are taken into consideration but for most intents and purposes, all cluster nodes should be considered equal.

Many [CLI tool](https://www.rabbitmq.com/cli.html) operations can be executed against any node. An [HTTP API](https://www.rabbitmq.com/management.html) client can target any cluster node.

Individual plugins can designate (elect) certain nodes to be "special" for a period of time. For example, [federation links](https://www.rabbitmq.com/federation.html)
are colocated on a particular cluster node. Should that node fail, the links will be restarted on a different node.

In versions older than 3.6.7, [RabbitMQ management plugin](https://www.rabbitmq.com/management.html) used a dedicated node for stats collection and aggregation.

_Restarting Cluster Nodes_

A restarted node will sync the schema and other information from its peers on boot. Before this process completes,
the node **won't be fully started and functional**.

A stopping node picks an online cluster member (only disc nodes will be considered) to sync with after restart.
Upon restart the node will try to contact that peer 10 times by default, with 30 second response timeouts.

In case the peer becomes available in that time interval, the node successfully starts, syncs what it needs from the peer and keeps going.

If the peer does not become available, the restarted node will **give up and voluntarily stop**. Such condition can be
identified by the timeout (`timeout_waiting_for_tables`) warning messages in the logs that eventually lead to node startup failure:

When a node has no online peers during shutdown, it will start without attempts to sync with any known peers.
It does not start as a standalone node, however, and peers will be able to rejoin it.

When the entire cluster is brought down therefore, the last node to go down is the only one that didn't have any running
peers at the time of shutdown. That node can start without contacting any peers first. Since nodes will try to contact
a known peer for up to 5 minutes (by default), nodes can be restarted in any order in that period of time. In this case
they will rejoin each other one by one successfully. This window of time can be adjusted using two configuration settings:

```properties
# wait for 60 seconds instead of 30
mnesia_table_loading_retry_timeout = 60000

# retry 15 times instead of 10
mnesia_table_loading_retry_limit = 15
```

By adjusting these settings and tweaking the time window in which known peer has to come back it is possible to account
for cluster-wide redeployment scenarios that can be longer than 5 minutes to complete.

During upgrades, sometimes the last node to stop must be the first node to be started after the upgrade.
That node will be designated to perform a cluster-wide schema migration that other nodes can sync from and apply when they rejoin.

_What is Queue Mirroring_

`Important`: mirroring of classic queues will be `removed in a future version` of RabbitMQ. Consider using [quorum queues](https://www.rabbitmq.com/quorum-queues.html)
or a non-replicated classic queue instead.

By default, contents of a queue within a RabbitMQ cluster are located on a single node (the node on which the queue was declared).
This is in contrast to exchanges and bindings, which can always be considered to be on all nodes. Queues can optionally
run mirrors (additional replicas) on other cluster nodes.

Each mirrored queue consists of one `leader replica` and one or more `mirrors` (replicas). The leader is hosted on one node
commonly referred as the leader node for that queue. Each queue has its own leader node. All operations for a given queue
are first applied on the queue's leader node and then propagated to mirrors. This involves enqueueing publishes,
delivering messages to consumers, tracking [acknowledgements from consumers](https://www.rabbitmq.com/confirms.html) and so on.

Queue mirroring implies a cluster of nodes. It is therefore not recommended for use across a WAN (though of course,
clients can still connect from as near and as far as needed).

Messages published to the queue are replicated to all mirrors. Consumers are connected to the leader regardless of
which node they connect to, with mirrors dropping messages that have been acknowledged at the leader. Queue mirroring
therefore enhances availability, but does not distribute load across nodes (all participating nodes each do all the work).

If the node that hosts queue leader fails, the oldest mirror will be promoted to the new leader as long as it's synchronised.
[Unsynchronised mirrors](https://www.rabbitmq.com/ha.html#unsynchronised-mirrors) can be promoted, too, depending on queue mirroring parameters.

* [Clustering Guide](https://www.rabbitmq.com/clustering.html)
  * [Node Names (Identifiers)](https://www.rabbitmq.com/clustering.html#node-names)
  * [Hostname Resolution](https://www.rabbitmq.com/clustering.html#hostname-resolution-requirement)
  * [How CLI Tools Authenticate to Nodes (and Nodes to Each Other): the Erlang Cookie](https://www.rabbitmq.com/clustering.html#erlang-cookie)
  * [Cookie File Locations](https://www.rabbitmq.com/clustering.html#cookie-file-locations)
  * [Creating a Cluster](https://www.rabbitmq.com/clustering.html#creating)
  * [Restarting Cluster Nodes](https://www.rabbitmq.com/clustering.html#restarting)
  * [Restarts and Health Checks (Readiness Probes)](https://www.rabbitmq.com/clustering.html#restarting-readiness-probes)
  * [Hostname Changes Between Restarts](https://www.rabbitmq.com/clustering.html#restarting-with-hostname-changes)
  * [Forcing Node Boot in Case of Unavailable Peers](https://www.rabbitmq.com/clustering.html#forced-boot)
  * [Remove nodes from a cluster](https://www.rabbitmq.com/clustering.html#removing-nodes)
  * [Disk and RAM Nodes](https://www.rabbitmq.com/clustering.html#cluster-node-types)

* [Cluster Formation and Peer Discovery](https://www.rabbitmq.com/cluster-formation.html)
  * [How Peer Discovery Works](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-how-does-it-work)
  * [Nodes Rejoining Their Existing Cluster](https://www.rabbitmq.com/cluster-formation.html#rejoining)
  * Peer Discovery
    * [Config File Peer Discovery Backend](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-classic-config)
    * [DNS Peer Discovery Backend](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-dns)
    * [Peer Discovery on AWS (EC2)](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-aws)
    * [Peer Discovery on Kubernetes](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-k8s)
    * [Peer Discovery Using Consul](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-consul)
    * [Peer Discovery Using Etcd](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-etcd)
  * [Race Conditions During Initial Cluster Formation](https://www.rabbitmq.com/cluster-formation.html#initial-formation-race-condition)
  * [Node Health Checks and Forced Removal](https://www.rabbitmq.com/cluster-formation.html#node-health-checks-and-cleanup)
  * [Peer Discovery Failures and Retries](https://www.rabbitmq.com/cluster-formation.html#discovery-retries)

* [Classic Queue Mirroring](https://www.rabbitmq.com/ha.html)
  * [What is Queue Mirroring](https://www.rabbitmq.com/ha.html#what-is-mirroring)
  * [Queue Leader Location](https://www.rabbitmq.com/ha.html#queue-leader-location)
  * ["nodes" Policy and Migrating Leaders](https://www.rabbitmq.com/ha.html#fixed-leader-promotion)
  * [Mirroring of Exclusive Queues](https://www.rabbitmq.com/ha.html#exclusive-queues-are-not-mirrored)
  * [Non-mirrored Queue Behavior in a Cluster](https://www.rabbitmq.com/ha.html#non-mirrored-queue-behavior-on-node-failure)
  * [Mirrored Queue Implementation and Semantics](https://www.rabbitmq.com/ha.html#behaviour)
  * [Publisher Confirms and Transactions](https://www.rabbitmq.com/ha.html#confirms-transactions)
  * [Flow Control](https://www.rabbitmq.com/ha.html#flow-control)
  * [Leader Failures and Consumer Cancellation](https://www.rabbitmq.com/ha.html#cancellation)
  * [Unsynchronised Mirrors](https://www.rabbitmq.com/ha.html#unsynchronised-mirrors)
  * [Promotion of Unsynchronised Mirrors on Failure](https://www.rabbitmq.com/ha.html#promoting-unsynchronised-mirrors)
  * [Stopping Nodes and Synchronisation](https://www.rabbitmq.com/ha.html#start-stop)
  * [Stopping Nodes Hosting Queue Leader with Only Unsynchronised Mirrors](https://www.rabbitmq.com/ha.html#cluster-shutdown)
  * [Loss of a Leader While All Mirrors are Stopped](https://www.rabbitmq.com/ha.html#promotion-while-down)
  * [Batch Synchronization](https://www.rabbitmq.com/ha.html#batch-sync)

* [Clustering and Network Partitions](https://www.rabbitmq.com/partitions.html)
  * Partitions Caused by Suspend and Resume
  * Recovering From a Split-Brain
  * Partition Handling Strategies

* [Net Tick Time (Inter-node Communication Heartbeats)](https://www.rabbitmq.com/nettick.html)

#### Federation

* [Federation Plugin](https://www.rabbitmq.com/federation.html)
* [Federated Exchanges](https://www.rabbitmq.com/federated-exchanges.html)
* [Federated Queues](https://www.rabbitmq.com/federated-queues.html)
* [Federation Reference](https://www.rabbitmq.com/federation-reference.html)

#### Shovel plugin

* [Shovel Plugin](https://www.rabbitmq.com/shovel.html)
* [Static Shovels](https://www.rabbitmq.com/shovel-static.html)
* [Dynamic Shovels](https://www.rabbitmq.com/shovel-dynamic.html)

#### High availability with Pacemaker and DRBD - [参考文档](https://www.rabbitmq.com/pacemaker.html)

* DRBD
* Pacemaker
* CoroSync
* Heartbeat
* OpenAIS

### 端口号
* `4369`: [epmd](http://erlang.org/doc/man/epmd.html), a peer discovery service used by RabbitMQ nodes and CLI tools
* `5672`, `5671`: used by AMQP 0-9-1 and 1.0 clients without and with TLS
* `5552`, `5551`: used by the RabbitMQ Stream protocol clients without and with TLS
* `25672`: used for inter-node and CLI tools communication (Erlang distribution server port) and is allocated from a dynamic
  range (limited to a single port by default, computed as AMQP port + 20000). Unless external connections on these ports
  are really necessary (e.g. the cluster uses [federation](https://www.rabbitmq.com/federation.html) or CLI tools are used on machines outside the subnet),
  these ports should not be publicly exposed. See [networking guide](https://www.rabbitmq.com/networking.html) for details.
* `35672-35682`: used by CLI tools (Erlang distribution client ports) for communication with nodes and is allocated
  from a dynamic range (computed as server distribution port + 10000 through server distribution port + 10010).
  See [networking guide](https://www.rabbitmq.com/networking.html) for details.
* `15672`: [HTTP API](https://www.rabbitmq.com/management.html) clients, [management UI](https://www.rabbitmq.com/management.html)
  and [rabbitmqadmin](https://www.rabbitmq.com/management-cli.html) (only if the [management plugin](https://www.rabbitmq.com/management.html) is enabled)
* `61613`, `61614`: [STOMP clients](https://stomp.github.io/stomp-specification-1.2.html) without and with TLS (only if the [STOMP plugin](https://www.rabbitmq.com/stomp.html) is enabled)
* `1883`, `8883`: [MQTT clients](http://mqtt.org/) without and with TLS, if the [MQTT plugin](https://www.rabbitmq.com/mqtt.html) is enabled
* `15674`: STOMP-over-WebSockets clients (only if the [Web STOMP plugin](https://www.rabbitmq.com/web-stomp.html) is enabled)
* `15675`: MQTT-over-WebSockets clients (only if the [Web MQTT plugin](https://www.rabbitmq.com/web-mqtt.html) is enabled)
* `15692`: Prometheus metrics (only if the [Prometheus plugin](https://www.rabbitmq.com/prometheus.html) is enabled)

### 安装参考文档
* [Installing on RPM-based Linux (RedHat Enterprise Linux, CentOS, Fedora, openSUSE)](https://www.rabbitmq.com/install-rpm.html)
* [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/which-erlang.html)
* [Signed Packages](https://www.rabbitmq.com/signatures.html)

## 维护

```shell
# 查看服务状态
shell> sudo rabbitmqctl status

# checks if the local node is running and CLI tools can successfully authenticate with it
shell> sudo rabbitmq-diagnostics ping

# prints enabled components (applications), TCP listeners, memory usage breakdown, alarms and so on
shell> sudo rabbitmq-diagnostics status

# prints cluster membership information
shell> sudo rabbitmq-diagnostics cluster_status

# prints effective node configuration
shell> sudo rabbitmq-diagnostics environment

shell> sudo rabbitmq-diagnostics listeners
```

* [Command Line Tools](https://www.rabbitmq.com/cli.html)
* [Manual Pages](https://www.rabbitmq.com/manpages.html) - CLI工具参考手册
  * [rabbitmq-env.conf](https://www.rabbitmq.com/rabbitmq-env.conf.5.html): environment variable-based [configuration](https://www.rabbitmq.com/configure.html)
  * [rabbitmqctl](https://www.rabbitmq.com/rabbitmqctl.8.html): service management and [general operator commands](https://www.rabbitmq.com/cli.html)
  * [rabbitmq-diagnostics](https://www.rabbitmq.com/rabbitmq-diagnostics.8.html): commands useful for diagnostics, [health checking](https://www.rabbitmq.com/monitoring.html), and observing system state
  * [rabbitmq-plugins](https://www.rabbitmq.com/rabbitmq-plugins.8.html): [plugin management](https://www.rabbitmq.com/plugins.html)
  * [rabbitmq-upgrade](https://www.rabbitmq.com/rabbitmq-upgrade.8.html): operational tasks related to upgrades
  * [rabbitmq-queues](https://www.rabbitmq.com/rabbitmq-queues.8.html): operational tasks for queues
  * [rabbitmq-server](https://www.rabbitmq.com/rabbitmq-server.8.html): starts a RabbitMQ server node
  * [rabbitmq-service](https://www.rabbitmq.com/rabbitmq-service.8.html): Windows service management
  * [rabbitmq-echopid](https://www.rabbitmq.com/rabbitmq-echopid.8.html): a Windows-specific utility tool

## 参考文档

> [官方文档](https://www.rabbitmq.com/documentation.html)

### Connections / Channels / Virtual Hosts / Consumers

* [Connections](https://www.rabbitmq.com/connections.html)
* [Channels](https://www.rabbitmq.com/channels.html)
* [Virtual Hosts](https://www.rabbitmq.com/vhosts.html)
* [Queues](https://www.rabbitmq.com/queues.html)
* [Publishers](https://www.rabbitmq.com/publishers.html)
  * `Temporarily Blocking Publishing`
* [Consumers](https://www.rabbitmq.com/consumers.html)
  * `Delivery Acknowledgement Timeout` - If a consumer does not ack its delivery for more than the timeout value (`30 minutes by default`),
  its channel will be closed with a `PRECONDITION_FAILED` channel exception. The error will be logged by the node that the consumer was connected to.
  * `Exclusivity`
  * `Single Active Consumer` - 只启用一个消费者消费消息:`@Argument(name = "x-single-active-consumer", value = "true", type = "java.lang.Boolean")`
  * `Priority`

### 配置

* [How to Find Config File Location](https://www.rabbitmq.com/configure.html#verify-configuration-config-file-location)
* [Location of rabbitmq.conf, advanced.config and rabbitmq-env.conf](https://www.rabbitmq.com/configure.html#config-location)
* [`rabbitmq.conf` 配置示例](https://github.com/rabbitmq/rabbitmq-server/blob/v3.8.x/deps/rabbit/docs/rabbitmq.conf.example)
* [`advanced.config` 配置示例](https://github.com/rabbitmq/rabbitmq-server/blob/v3.8.x/deps/rabbit/docs/advanced.config.example)
* [How to Inspect and Verify Effective Configuration of a Running Node](https://www.rabbitmq.com/configure.html#verify-configuration-effective-configuration)
* [Configuration Value Encryption](https://www.rabbitmq.com/configure.html#configuration-encryption)
* [Configuration Using Environment Variables](https://www.rabbitmq.com/configure.html#customise-environment)
* [File and Directory Locations](https://www.rabbitmq.com/relocate.html)
* [Logging](https://www.rabbitmq.com/logging.html)
  * `Logged Events`
* [Persistence Configuration](https://www.rabbitmq.com/persistence-conf.html)
* [Networking](https://www.rabbitmq.com/networking.html)
  * How to Temporarily Stop New Client Connections
  * Tuning for a large number of concurrent connections
  * High connection churn scenarios and resource exhaustion
  * TCP buffer size
  * Kernel TCP settings and limits (e.g. TCP keepalives and open file handle limit)
  > [Troubleshooting Network Connectivity](https://www.rabbitmq.com/troubleshooting-networking.html)
* [Parameters and Policies](https://www.rabbitmq.com/parameters.html)
  * If they need to be the same across all nodes in a cluster
  * If they are likely to change at run time
* [Credentials and Passwords](https://www.rabbitmq.com/passwords.html)

#### What is `EPMD` and How is It Used?

[epmd](http://www.erlang.org/doc/man/epmd.html) (for Erlang Port Mapping Daemon) is a small additional daemon that runs
alongside every RabbitMQ node and is used by the [runtime](https://www.rabbitmq.com/runtime.html) to discover what port
a particular node listens on for inter-node communication. The port is then used by peer nodes and [CLI tools](https://www.rabbitmq.com/cli.html).

When a node or CLI tool needs to contact node `rabbit@hostname2` it will do the following:

* Resolve `hostname2` to an IPv4 or IPv6 address using the standard OS resolver or a custom one specified in the [inetrc file](http://erlang.org/doc/apps/erts/inet_cfg.html)
* Contact `epmd` running on `hostname2` using the above address
* Ask `epmd` for the port used by node `rabbit` on it
* Connect to the node using the resolved IP address and the discovered port
* Proceed with communication

> [EPMD 参考文档](https://www.rabbitmq.com/networking.html#epmd)

### Management UI / 认证授权 / 监控 / Alarms / TLS / 排障

#### Management UI

Any cluster node with `rabbitmq-management` plugin enabled can be used for management UI access or data collection by
monitoring tools. It will reach out to other nodes and collect their stats, then aggregate and return a response to the client.

When monitoring a cluster of nodes, there is `no need` to contact `each node` via HTTP API individually. Instead, contact
a random node or a load balancer that sits in front of the cluster.

Disabling the metrics collection is the preferred option if it is being used with an external monitoring system,
as this reduced the overhead that statistics collection and aggregation causes in the broker.
```properties
management_agent.disable_metrics_collector = true
```

* [Management Plugin - 参考文档](https://www.rabbitmq.com/management.html)
* [Access and Permissions](https://www.rabbitmq.com/management.html#permissions)
* [Management Command Line Tool](https://www.rabbitmq.com/management-cli.html)

#### 认证授权

* [Authentication, Authorisation, Access Control](https://www.rabbitmq.com/access-control.html)
  * Default Virtual Host and User
  * "guest" user can only connect from localhost
  * Managing Users and Permissions
  * Authorisation: How Permissions Work
  * User Tags and Management UI Access
  * Built-in Authentication Mechanisms
* [LDAP Support](https://www.rabbitmq.com/ldap.html)

> RabbitMQ may `cache` the results of access control checks on a per-connection or per-channel basis. Hence changes to
user permissions may only take effect when the `user reconnects`.

#### 监控 / Internal Event Exchange

* [Monitoring](https://www.rabbitmq.com/monitoring.html)
  * Metrics
  * Health Checks
  * Monitoring Tools
* [Internal Event Exchange](https://www.rabbitmq.com/event-exchange.html) - 记录事件
* [Firehose (Message Tracing)](https://www.rabbitmq.com/firehose.html) - 可以跟踪消息的发送和投递

#### Alarms

* [Memory and Disk Alarms](https://www.rabbitmq.com/alarms.html)
  * [Memory Alarms](https://www.rabbitmq.com/memory.html)
    * Configuring the Memory Threshold
    * Configuring the Paging Threshold
  * [Free Disk Space Alarms](https://www.rabbitmq.com/disk-alarms.html)
  * [Reasoning About Memory Use](https://www.rabbitmq.com/memory-use.html)
  * [Flow Control](https://www.rabbitmq.com/flow-control.html)

#### TLS Support

* [TLS Support](https://www.rabbitmq.com/ssl.html)
* [Troubleshooting TLS-enabled Connections](https://www.rabbitmq.com/troubleshooting-ssl.html)
* [Securing Cluster (Inter-node) and CLI Tool Communication with TLS (SSL)](https://www.rabbitmq.com/clustering-ssl.html)

#### 排障

* [Troubleshooting Guidance](https://www.rabbitmq.com/troubleshooting.html)
  * [Runtime Crash Dump Files](https://www.rabbitmq.com/troubleshooting.html#crash-dumps)

### 升级 / 备份 / 恢复

* [Upgrading RabbitMQ](https://www.rabbitmq.com/upgrade.html)

* [Backup and restore](https://www.rabbitmq.com/backup.html)

* [Schema Definition Export and Import](https://www.rabbitmq.com/definitions.html)

* [Blue-green deployment-based upgrade](https://www.rabbitmq.com/blue-green-upgrade.html)

* [Feature Flags](https://www.rabbitmq.com/feature-flags.html)

  Feature flags are a mechanism that controls what features are considered to be enabled or available on all cluster nodes.

  This subsystem was introduced in RabbitMQ 3.8.0 to allow rolling upgrades of cluster members without shutting down the entire cluster.

### Blue-Green Deployment

* [Upgrading RabbitMQ Using Blue-Green Deployment Strategy](https://www.rabbitmq.com/blue-green-upgrade.html)
* [Blue-Green Application Deployments with RabbitMQ](https://tanzu.vmware.com/content/blog/blue-green-application-deployments-with-rabbitmq)

### 协议

#### `AMQP 0-9-1 and extensions` - [AMQP 0-9-1 Model Explained](https://www.rabbitmq.com/tutorials/amqp-concepts.html)

Queues properties:
* Name
* Durable (the queue will survive a broker restart)
* Exclusive (used by only one connection and the queue will be deleted when that connection closes)
* Auto-delete (queue that has had at least one consumer is deleted when last consumer unsubscribes)
* Arguments (optional; used by plugins and broker-specific features such as message TTL, queue length limit, etc)

Before a queue can be used it has to be declared. Declaring a queue will cause it to be created if it does not already exist.
The declaration will have no effect if the queue does already exist and its attributes are the same as those in the declaration.
When the existing queue attributes are not the same as those in the declaration a channel-level exception with code 406 (`PRECONDITION_FAILED`) will be raised.

_Queue Names_

Queue names may be up to `255 bytes` of UTF-8 characters. An AMQP 0-9-1 broker can generate a unique queue name on
behalf of an app. To use this feature, pass an empty string as the queue name argument. The generated name will be returned
to the client with queue declaration response.

Queue names starting with `"amq."` are reserved for internal use by the broker. Attempts to declare a queue with a name
that violates this rule will result in a channel-level exception with reply code 403 (`ACCESS_REFUSED`).

_Consumers_

* Subscribe to have messages delivered to them ("push API"): this is the recommended option
* Polling ("pull API"): this way is `highly inefficient` and `should be avoided` in most cases

Each consumer (subscription) has an identifier called a `consumer tag`. It can be used to unsubscribe from messages. Consumer tags are just strings.

_Message ordering guarantees_

Messages can be returned to the queue using AMQP methods that feature a requeue parameter (`basic.recover`, `basic.reject`
and `basic.nack`), or due to a channel closing while holding unacknowledged messages. Any of these scenarios caused messages
to be requeued at the back of the queue for RabbitMQ releases earlier than 2.7.0. From RabbitMQ release 2.7.0,
messages are always held in the queue in publication order, even in the presence of requeueing or channel closure.

With release 2.7.0 and later it is still possible for individual consumers to observe messages out of order if the
queue has multiple subscribers. This is due to the actions of other subscribers who may requeue messages.
From the perspective of the queue the messages are always held in the publication order.

* [AMQP 0-9-1 Model Explained](https://www.rabbitmq.com/tutorials/amqp-concepts.html)
* [AMQP 0-9-1 Complete Reference Guide](https://www.rabbitmq.com/amqp-0-9-1-reference.html)
* [AMQP 0-9-1 Quick Reference](https://www.rabbitmq.com/amqp-0-9-1-quickref.html)
* [AMQP 0-9-1 Protocol Specification](https://www.rabbitmq.com/protocol.html)
  * [Specification - PDF](https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf)
  * [Generated Doc - PDF](https://www.rabbitmq.com/resources/specs/amqp-xml-doc0-9-1.pdf)
* [Broker Semantics](https://www.rabbitmq.com/semantics.html)
* [Compatibility and Conformance](https://www.rabbitmq.com/specification.html)
* [AMQP 0-9-1 Errata](https://www.rabbitmq.com/amqp-0-9-1-errata.html) - 解释规范中错误及模棱两可的内容

#### `STOMP`

* [STOMP - 官网](http://stomp.github.io/)
* [STOMP Plugin](https://www.rabbitmq.com/stomp.html)
* [STOMP-over-WebSockets](https://www.rabbitmq.com/web-stomp.html)

#### `MQTT`

* [MQTT Plugin](https://www.rabbitmq.com/mqtt.html)
* [MQTT-over-WebSockets](https://www.rabbitmq.com/web-mqtt.html)

#### `AMQP 1.0`

#### `HTTP and WebSockets`

> [ Which protocols does RabbitMQ support? ](https://www.rabbitmq.com/protocols.html)

### Reliability / Publisher Confirms

`Publisher confirms` are a RabbitMQ extension to implement reliable publishing.

* [Reliable Delivery](https://www.rabbitmq.com/reliability.html)
* [Publisher Confirms 示例](https://www.rabbitmq.com/tutorials/tutorial-seven-java.html)

### Streams / Lazy Queues / Quorum Queues

#### Streams

Streams are a `new` persistent and replicated data structure in `RabbitMQ 3.9` which models an `append-only log` with non-destructive consumer semantics.

使用场景:
* Large fan-outs
* Replay / Time-travelling
* Throughput Performance
* Large logs

Streams replicate data across multiple nodes and publisher confirms are only issued once the data has been replicated to a `quorum` of stream replicas.

Streams always store data on disk, however, they do not explicitly flush (fsync) the data from the operating system page
cache to the underlying storage medium, instead they rely on the operating system to do as and when required.

If more data safety is required then consider using quorum queues instead as no publisher confirms are issued until at
least a quorum of nodes have both written and flushed the data to disk.

* [Streams 文档](https://www.rabbitmq.com/streams.html)
* [Stream Plugin](https://www.rabbitmq.com/stream.html)

#### Lazy Queues

_Node Startup_

When a node is running and under normal operation, lazy queues will keep all messages on disk, the only exception being in-flight messages.

When a RabbitMQ node starts, all queues, including the lazy ones, will load up to `16,384` messages into RAM.
If [queue index embedding](https://www.rabbitmq.com/persistence-conf.html) is enabled
(the `queue_index_embed_msgs_below` configuration parameter is greater than 0), the payloads of those messages will be loaded into RAM as well.

For example, a lazy queue with `20,000` messages of `4,000` bytes each, will load `16,384` messages into memory.
These messages will use `63MB` of system memory. The queue process will use another `8.4MB` of system memory, bringing the total to just over `70MB`.

This is an important consideration for capacity planning if the RabbitMQ node is memory constrained, or if there are many lazy queues hosted on the node.

`It is important to remember that an under-provisioned RabbitMQ node in terms of memory or disk space will fail to start.`

Setting `queue_index_embed_msgs_below` to `0` will disable payload embedding in the queue index. As a result,
lazy queues will not load message payloads into memory on node startup. See the Persistence Configuration guide for details.

When `setting queue_index_embed_msgs_below` to `0` all messages will be stored to the message store. With many messages
across many lazy queues, that can lead to higher disk usage and also higher file descriptor usage.

Message store is append-oriented and uses a compaction mechanism to reclaim disk space. In extreme scenarios it can use two
times more disk space compared to the sum of message payloads stored on disk. It is important to overprovision disk space
to account for such peaks.

All messages in the message store are stored in 16MB files called segment files or segments. Each queue has its own
file descriptor for each segment file it has to access. For example, if 100 queues store 10GB worth of messages,
there will be 640 files in the message store and up to 64000 file descriptors. Make sure the nodes have a high enough
[open file limit](https://www.rabbitmq.com/production-checklist.html#resource-limits-file-handle-limit)
and overprovision it when in doubt (e.g. to 300K or 500K). For new installations it is possible to
increase file size used by the message store using `msg_store_file_size_limit` configuration key. `Never change segment
file size for existing installations` as that can result in a subset of messages being ignored by the node and can break segment file compaction.

* [Lazy Queues](https://www.rabbitmq.com/lazy-queues.html)

#### Quorum Queues

`Quorum Queues` 使用 [Raft Consensus Algorithm](https://raft.github.io/) 复制 FIFO Queue。

Performance tails off quite a bit for quorum queue node sizes `larger than 5`. We do not recommend running quorum queues
`on more than 7` RabbitMQ nodes. The `default quorum queue size is 3` and is controllable using the `x-quorum-initial-group-size` queue argument.

Quorum queues are designed to provide data safety under network partition and failure scenarios. A message that was
successfully confirmed back to the publisher using the [publisher confirms](https://www.rabbitmq.com/confirms.html) feature should not be lost as long as
at least a majority of RabbitMQ nodes hosting the quorum queue are not permanently made unavailable.

* [Quorum Queues](https://www.rabbitmq.com/quorum-queues.html)
  * [Poison Message Handling](https://www.rabbitmq.com/quorum-queues.html#poison-message-handling)

### RabbitMQ 对 AMQP 0-9-1 协议的扩展功能

#### Publishing

* [Consumer Acknowledgements and Publisher Confirms](https://www.rabbitmq.com/confirms.html) (aka Publisher Acknowledgements) are a lightweight way to know when RabbitMQ has taken responsibility for messages.
* [Blocked Connection Notifications](https://www.rabbitmq.com/connection-blocked.html) allows clients to be notified when a connection is blocked and unblocked.

#### Consuming

* [Consumer Cancellation Notifications](https://www.rabbitmq.com/consumer-cancel.html) let a consumer know if it has been cancelled by the server.
* [Consumer Prefetch](https://www.rabbitmq.com/consumer-prefetch.html)
* [basic.nack](https://www.rabbitmq.com/nack.html) extends `basic.reject` to support rejecting multiple messages at once.
* [Consumer Priorities](https://www.rabbitmq.com/consumer-priority.html) allow you to send messages to higher priority consumers first.
* [Direct reply-to](https://www.rabbitmq.com/direct-reply-to.html) allows RPC clients to receive replies to their queries without needing to declare a temporary queue.

#### Message Routing

* [Exchange to Exchange Bindings](https://www.rabbitmq.com/e2e.html) allow messages to pass through multiple exchanges for more flexible routing.
* [Alternate Exchanges](https://www.rabbitmq.com/ae.html) route messages that were otherwise unroutable.
* [Sender-selected Distribution](https://www.rabbitmq.com/sender-selected.html) allows a publisher to decide where messages are routed directly.

#### Message Lifecycle

* [Per-Queue Message TTL](https://www.rabbitmq.com/ttl.html#per-queue-message-ttl) determines how long an unconsumed message can live in a queue before it is automatically deleted.
* [Per-Message TTL](https://www.rabbitmq.com/ttl.html#per-message-ttl) determines the TTL on a per-message basis.
* [Queue TTL](https://www.rabbitmq.com/ttl.html#queue-ttl) determines how long an unused queue can live before it is automatically deleted.
* [Dead Letter Exchanges](https://www.rabbitmq.com/dlx.html) ensure messages get re-routed when they are rejected or expire.
* [Queue Length Limit](https://www.rabbitmq.com/maxlength.html) allows the maximum length of a queue to be set.
* [Priority Queues](https://www.rabbitmq.com/priority.html) support the message priority field (in a slightly different way).

#### Authentication and Identity

* The [User-ID](https://www.rabbitmq.com/validated-user-id.html) message property is validated by the server.
* Clients that advertise the appropriate capability may receive explicit [authentication failure notifications](https://www.rabbitmq.com/auth-notification.html) from the broker.
* [update-secret](https://www.rabbitmq.com/amqp-0-9-1-reference.html#connection.update-secret) to be able to renew credentials for an active connection, when those credentials can expire.

### Client Documentation

* [Java Client API Guide](https://www.rabbitmq.com/api-guide.html)
  * `Client-provided connection name`
  * [`Channels and Concurrency Considerations (Thread Safety)`](https://www.rabbitmq.com/api-guide.html#concurrency)

    As a rule of thumb, `sharing Channel` instances between threads is something to be avoided. Applications should prefer
    using a `Channel` per thread instead of sharing the same `Channel` across multiple threads.

    While some operations on channels are safe to invoke concurrently, some are not and will result in incorrect frame
    interleaving on the wire, double acknowledgements and so on.

    Concurrent publishing on a shared channel can result in incorrect frame interleaving on the wire, triggering
    a connection-level protocol exception and immediate connection closure by the broker. It therefore requires explicit
    synchronization in application code (`Channel#basicPublish` must be invoked in a critical section). Sharing channels
    between threads will also interfere with Publisher Confirms. Concurrent publishing on a shared channel is best avoided entirely,
    e.g. by using a channel per thread.

    Consuming in one thread and publishing in another thread on a shared channel can be safe.

    When `manual acknowledgements` are used, it is important to consider what thread does the acknowledgement.
    If it's different from the thread that received the delivery (e.g. `Consumer#handleDelivery` delegated delivery handling to a different thread),
    acknowledging with the `multiple` parameter set to `true` is unsafe and will result in double-acknowledgements,
    and therefore a channel-level protocol exception that closes the channel. Acknowledging a single message at a time can be safe.

  * [`Receiving Messages by Subscription ("Push API")`](https://www.rabbitmq.com/api-guide.html#consuming)

    Callbacks to `Consumers` are dispatched in a thread pool separate from the thread that instantiated its `Channel`.
    This means that `Consumers` can safely call blocking methods on the `Connection` or `Channel`, such as `Channel#queueDeclare` or `Channel#basicCancel`.

    Each `Channel` has its own dispatch thread. For the most common use case of one `Consumer` per `Channel`,
    this means `Consumers` do not hold up other `Consumers`. If you have multiple `Consumers` per `Channel` be aware that
    `a long-running Consumer` may hold up dispatch of callbacks to other `Consumers` on that `Channel`.

  * [Handling unroutable messages](https://www.rabbitmq.com/api-guide.html#returning)
  * [Shutdown Protocol](https://www.rabbitmq.com/api-guide.html#shutdown)
    * Overview of the Client Shutdown Process
    * Information about the circumstances of a shutdown
    * Atomicity and use of the isOpen() method
  * [Consumer Operation Thread Pool](https://www.rabbitmq.com/api-guide.html#consumer-thread-pool)
  * [Service discovery with the AddressResolver interface](https://www.rabbitmq.com/api-guide.html#service-discovery-with-address-resolver)
  * [Heartbeat Timeout](https://www.rabbitmq.com/heartbeats.html)
  * [Support for Java non-blocking IO](https://www.rabbitmq.com/api-guide.html#java-nio)
  * [Automatic Recovery From Network Failures](https://www.rabbitmq.com/api-guide.html#recovery)
    * Connection Recovery
    * When Will Connection Recovery Be Triggered?
    * Recovery Listeners
    * Effects on Publishing
    * Failure Detection and Recovery Limitations
    * Manual Acknowledgements and Automatic Recovery
    * Channels Lifecycle and Topology Recovery
    * Unhandled Exceptions
  * [Metrics and Monitoring](https://www.rabbitmq.com/api-guide.html#metrics)

* [Spring AMQP](https://docs.spring.io/spring-amqp/docs/current/reference/html/)
  * [Annotation-driven Listener Endpoints](https://docs.spring.io/spring-amqp/docs/current/reference/html/#async-annotation-driven) -【重要】
  * [Exception Handling](https://docs.spring.io/spring-amqp/docs/current/reference/html/#exception-handling) -【重要】
  * [Recover/Requeue/Reject/Retry](https://docs.spring.io/spring-amqp/docs/current/reference/html/#resilience-recovering-from-errors-and-broker-failures) -【重要】
  * [Multiple Broker (or Cluster) Support](https://docs.spring.io/spring-amqp/docs/current/reference/html/#multi-rabbit) -【重要】
  * [Naming Connections](https://docs.spring.io/spring-amqp/docs/current/reference/html/#naming-connections)
  * [Blocked Connections and Resource Constraints](https://docs.spring.io/spring-amqp/docs/current/reference/html/#blocked-connections-and-resource-constraints)
  * [Using a Separate Connection](https://docs.spring.io/spring-amqp/docs/current/reference/html/#separate-connection)
  * [Connection and Channel Listeners](https://docs.spring.io/spring-amqp/docs/current/reference/html/#connection-channel-listeners)
  * [Logging Channel Close Events](https://docs.spring.io/spring-amqp/docs/current/reference/html/#channel-close-logging)
  * [Runtime Cache Properties](https://docs.spring.io/spring-amqp/docs/current/reference/html/#runtime-cache-properties)
  * [Adding Custom Client Connection Properties](https://docs.spring.io/spring-amqp/docs/current/reference/html/#custom-client-props)
  * [Publishing is Asynchronous — How to Detect Successes and Failures](https://docs.spring.io/spring-amqp/docs/current/reference/html/#publishing-is-async)
  * [Correlated Publisher Confirms and Returns](https://docs.spring.io/spring-amqp/docs/current/reference/html/#template-confirms)
  * [Strict Message Ordering in a Multi-Threaded Environment](https://docs.spring.io/spring-amqp/docs/current/reference/html/#multi-strict)
  * [Validated User Id](https://docs.spring.io/spring-amqp/docs/current/reference/html/#template-user-id)
  * [Message Builder API](https://docs.spring.io/spring-amqp/docs/current/reference/html/#message-builder)
  * [Consumer Events](https://docs.spring.io/spring-amqp/docs/current/reference/html/#consumer-events)
  * [Detecting Idle Asynchronous Consumers](https://docs.spring.io/spring-amqp/docs/current/reference/html/#idle-containers)
  * [Event Consumption](https://docs.spring.io/spring-amqp/docs/current/reference/html/#event-consumption)
  * [Broker Event Listener](https://docs.spring.io/spring-amqp/docs/current/reference/html/#broker-events)
  * [Logging Subsystem AMQP Appenders](https://docs.spring.io/spring-amqp/docs/current/reference/html/#logging) - 支持日志往AMQP发送
  * Transactions
    * [Transactions](https://docs.spring.io/spring-amqp/docs/current/reference/html/#transactions)
    * [Using transactions with RabbitMQ and SQL database in Spring Boot application](http://lifeinide.com/post/2017-12-29-spring-boot-rabbitmq-transactions/)

* [JMS Client](https://www.rabbitmq.com/jms-client.html)
  * [JMS Client Spec Compliance](https://www.rabbitmq.com/jms-client-compliance.html)

* [`Heartbeats` - Detecting Dead TCP Connections with Heartbeats and TCP Keepalives](https://www.rabbitmq.com/heartbeats.html) - 重要

* [AMQP 0-9-1 Reference](https://www.rabbitmq.com/amqp-0-9-1-reference.html)

* [AMQP 0-9-1 URI Spec](https://www.rabbitmq.com/uri-spec.html)
  * [URI Query Parameters](https://www.rabbitmq.com/uri-query-parameters.html)

* [Clients Libraries and Developer Tools](https://www.rabbitmq.com/devtools.html)

redpajama_set_name: RedPajamaGithub


Timeout 72 took place on the 27-28-29th December of 2017 in the beautiful paradise called Goa, located in India. The inaugural edition of Timeout Global Entertainment's entertainment extravaganza become one of the biggest and most appreciated events in the live space in India.
With a mammoth lineup including the likes of Wiz Khalifa, Jason Derulo, Martin Garrix, Don Diablo, Timmy Trumpet, NERVO, Vini Vici, Lucky Ali, Papon and more, visitors from all over India and many countries abroad contributed to a footfall of around 30,000 per day.


text:
N SCENE
by Robert Cocuzzo
ARE YOU READY TO TOAST THE 17TH ANNUAL NANTUCKET WINE FESTIVAL? HOLLY FINIGAN OF THE NANTUCKET BLACKBOOK GIVES LADIES THE INSIDE TRACK ON WHAT…
THE ISLE OF MAHON
From his Benjamin Franklin haircut down to his Converse high tops, Gene Mahon is a Nantucket icon. Walk into most any social event, no…
April 25, 2013 November 23, 2016
THE WIDOW'S WORK
by Jen Laskey
The sparkling legacy of Veuve Clicquot has made its way into clinking glasses around the world, and is sure to fill many more at…
THE MEETING OF THE MINDS
Nothing breaks up a fall weekend quite like having two U.S. senators, the world's top stem cell researcher, the former Secretary of the Treasury…
THE MACY'S DAY PARADE: IT ALL BEGAN ON NANTUCKET
Forty-four million people watch the Macy's Thanksgiving Day Parade every year, three million of which crowd the streets of New York City, their eyes…
THE TRIUMPH AND TRAGEDY
At a time when few twelve-year-olds ventured far beyond their own neighborhoods, Harris Wofford boarded a transatlantic ocean liner and sailed east from New…
HOME ON THE RANGE?
For eight long years, the Nantucket Hunting Association has been gunning for a shooting range to be built off Shadbush Road out by the…
AN ARTIST AT NINETY
At ninety years old, Maggie Meredith is the oldest working artist on Nantucket. A painter, poet and rug maker, Meredith is the matriarch of…
The band, Coq au Vin, has taken Nantucket by storm with an eclectic repertoire that includes everything from Django-style gypsy jazz, Eastern European and…
A JARRING EXPERIENCE
Before the season's first frost, many islanders look to preserve a taste of summer by canning, drying, pickling, and smoking a bounty of local…
1 … 60 61 62 63 64 65 66 67 68


If God is so good, why does He let bad things happen?
This is definitely one of the most difficult questions we find ourselves asking as believers. We know that God is powerful; we know that He is good; so why does He allow such bad things to happen?
Here's the thing: God is eternal, infinite, omniscient, omnipresent, and omnipotent. He is everywhere and knows everything from the beginning of time to the end. How could we human beings, who are severely limited in our perspective, ever truly understand God's ways?
The book of Job deals with the problem of bad things happening in life when we know God could just say a word and make it go away. In this story, God allows Satan to do everything he wanted to Job--except kill him. So Satan did it all. He destroyed Job's land, murdered his family, and even gave him a horrible disease.
When Job's friends came around and said, "What did you do to make God so mad at you?", Job did not curse God at all. He said, "Though [God can] slay me, yet will I hope in him" (Job 13:15). Later, he says, "The LORD gave and the LORD has taken away; may the name of the LORD be praised" (Job 1:21). What crazy faith he had!
We need to remember that Job did not understand why God had allowed the things He did, but he DID know that God was good, so he continued to trust in Him. Ultimately, that should be our response to bad things in our lives as well.
Yeah, but this still stinks.
I know that that sounds all well and good in words. The Bible says that all things work together for good purposes (Romans 8:28). And yet, sometimes that's just not a "good enough" reason for us. Life hurts so badly sometimes. We suffer so hard sometimes. We find ourselves crying out, "Why, why, why does God allow it?"
Even if we can't see the good purpose in it, even when everything seems like it's going wrong and we or the people we love are suffering, we must trust that what is happening is for the best because God sees a much bigger picture than we do (Ecclesiastes 7:14).
Sometimes His plan hurts, but that doesn't mean it is the wrong course of action. "Trust in the LORD with all your heart and lean not on your own understanding; in all your ways acknowledge Him, and He will make your paths straight" (Proverbs 3:5-6).
God is eternal, infinite, omniscient, omnipresent, and omnipotent. He is everywhere and knows everything from the beginning of time to the end. How could we human beings, who are severely limited in our perspective, ever truly understand God's ways? The Bible says that all things happen for the glory of God (Romans 8:28). Yes, sometimes that's just not a "good enough" reason because life often really hurts. But even if we can't see the good purpose in it, we must trust that what is happening is for the best because God sees a much bigger picture than we do (Ecclesiastes 7:14; Proverbs 3:5-6).


I am trying to deploy my plug-in on my nuxeo-cap-6.0-HF02-tomcat instance in the cloud. My code works fine in Eclipse (same SDK) and is being deployed correctly.
However, on my instance, Tomcat doesn't pickup the plug-in. There is no output or error. I put it in nxserver/plugins. The permissions are correct.
I tried to export the JAR from Eclipse and build it with Maven. None works.
You need a proper `` that will defined the configuration of the various plugins, including the one that builds the JAR. See [How to create an empty bundle](http://doc.nuxeo.com/x/kwBu) in the documentation.
You need a proper <parent> that will defined the configuration of the various plugins, including the one that builds the JAR. See How to create an empty bundle in the documentation.


text:
Rich Hall (ur. 10 czerwca 1954) – amerykański komik, pisarz, dramaturg i muzyk, półkrwi Czirokez, znany z goszczenia w programach panelowych (QI) i rozrywkowych (Saturday Night Live, Late Show with David Letterman). Mieszka i pracuje w Londynie wraz z żoną Karen i córką Dixie Rae.

Przypisy

Urodzeni w 1954
Amerykańscy komicy
Ludzie związani z Londynem


text:
AJAX Content

This content has been loaded via AJAX. Ajax Content Tooltip

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse vitae lorem felis. Maecenas ac ipsum non leo
	eleifend commodo euismod eget dolor. Nulla vitae lectus odio, eu pellentesque lorem.

Curabitur et nunc et dolor vestibulum vulputate eu id tellus. Donec imperdiet laoreet lectus, sed elementum sapien
	lobortis non. Aliquam nec odio id diam varius posuere non vel diam.	Pellentesque quis fringilla est. Ut pretium,
	libero in condimentum ultrices, nulla nibh tempus ante, nec sagittis nisi leo eget diam. Etiam nec enim sed eros
	sollicitudin fringilla.